English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、関数について学びます。関数とは何か、その構文、そしてKotlinでユーザー定義関数を作成する方法について説明します。
プログラミングでは、関数は特定のタスクを実行する関連する文のセットです。
関数は、大きなプログラムをより小さなモジュール化ブロックに分解するために使用されます。例えば、ユーザーの入力に基づいて円を作成し、それに色を塗る必要があります。この問題を解決するために、二つの関数を作成できます:
createCircle() 関数 - 円を生成するために使用されます
colorCircle() 関数 - 色を塗るために使用されます
複雑なプログラムをより小さなコンポーネントに分割することで、プログラムをより整理し、管理しやすくなります。
さらに、重複を避け、コードの再利用性を高めます。
ユーザー定義の関数か、標準ライブラリ内の関数かによって、関数には二種類あります:
Kotlin 標準ライブラリ関数
ユーザー定義の関数
標準ライブラリ関数は、Kotlinでいつでも使用できるインビルト関数です。例えば、
print()は、メッセージを標準出力ストリーム(モニタ)に打印するライブラリ関数です。
sqrt()は数字の平方根(Double値)を返します。
fun main(args: Array<String>) { var number = 5.5 print("Result = ${Math.sqrt(number)}") }
このプログラムを実行すると、出力は以下のようになります:
Result = 2.345207879911715
これはKotlin 標準ライブラリのリンクを提供しておきますので、ご覧ください。
前述の通り、自分で関数を作成できます。これらの関数はユーザー定義関数と呼ばれます。
関数を(呼び出し)使用する前に、それを定義する必要があります。
Kotlinで関数を定義する方法は以下の通りです:
fun callMe() { //関数本体 }
Kotlinで関数を定義するには、fun キーワードを使用します。その後は関数の名前(識別子)。ここでは、関数の名前は callMe です。
上記のプログラムでは、括弧( )が空です。これは、この関数は何も引数を受け取らないことを意味します。引数についての詳細は本文の後半で説明します。
括弧内のコード{ }は関数の本体です。
この関数を呼び出して、関数内でコードを実行する必要があります。これを行う方法は以下の通りです:
callme()
この文は前に宣言された関数 callMe() を呼び出している。
fun callMe() { println("callMe() 関数から出力を行う。") println("これはすごい(まだ内部から出力している)。") } fun main(args: Array<String>) { callMe() println("callMe() 関数から外部出力を行う。") }
このプログラムを実行すると、出力は以下のようになります:
callMe() 関数から出力を行う。 これはすごい(まだ内部から出力している)。 callMe() 関数から外部出力を行う。
上記のコードの callMe() 関数は何も引数を受け取らない。
また、この関数は何も値を返しません(返却型がUnitです)。
他の関数の例を見てみましょう。この関数は引数を受け取り、値を返します。
fun addNumbers(n1: Double, n2: Double): Int { val sum = n1 + n2 val sumInteger = sum.toInt() return sumInteger } fun main(args: Array<String>) { val number1 = 12.2 val number2 = 3.4 val result: Int result = addNumbers(number1, number2) println("result = $result") }
このプログラムを実行すると、出力は以下のようになります:
result = 15
ここでは、関数呼び出し中に2つのDouble型の引数number1とnumber2addNumbers()関数に渡されます。これらの引数は実際の引数(実引数)と呼ばれます。
result = addNumbers(number1, number2)
引数n1とn2渡された引数(関数定義内で)を受け取ります。これらの引数は形式引数(または形引数)と呼ばれます。
Kotlinでは、引数はコンマで区切られます。同様に、形式引数の型は明示的に記入する必要があります。
注意、実際の引数と形式引数のデータ型は一致する必要があります。つまり、最初の実際の引数のデータ型は最初の形式引数の型と一致する必要があります。同様に、第二の実際の引数の型は第二の形式引数の型と一致する必要があります。
ここでは、
return sumInteger
これはreturn文です。このコードはaddNumbers()関数を終了し、プログラムの制御はmain()関数にジャンプします。
プログラムでは、sumIntegerがaddNumbers()関数から返されます。この値は変数resultに割り当てられています。
注意、
sumIntegerとresultはInt型です。
関数の返却型は関数定義で指定されます。
//返却型がInt fun addNumbers(n1: Double, n2: Double): Int { ... .. ... }
関数が何も値を返さない場合、その返却型はUnitです。返却型がIntの場合、関数定義で返却型を指定することができます。
fun main(args: Array<String>) { println(getName("John", "Doe")) } fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
このプログラムを実行すると、出力は以下のようになります:
John Doe
ここでは、getName()関数は2つのString引数を受け取り、Stringを返します。
関数が単一の式を返す場合(上の例のように)、関数体の大括弧{}を省略し、=シンボルの後に主体を指定することができます。
この場合、明示的に返り値の型を宣言することは選択的なもので、返り値の型はコンパイラが推測することができます。上記の例では、返り値の型を置き換えることができます。
fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
同等です:
fun getName(firstName: String, lastName: String) = "$firstName $lastName"