この資料では、「関数」について学びます。関数とは、ひとまとまりの処理に名前をつけておき、必要なときに何度でも呼び出せる仕組みです。
関数(いわゆるサブルーチン)として一連の処理を部品化しておくことで、次のようなメリットがあります:
再利用性向上
一度作った処理を何度でも使える。修正も1箇所で済む。
可読性向上
処理内容を関数名で表現でき、プログラム全体が見やすくなる。
保守性向上
特定処理を関数化しておけば、他への影響を気にせず改良やバグ修正がしやすい。
分担しやすい
関数単位で作業を分担でき、チーム開発が効率的になる。
エンジニアはひとまとまりの処理に関数名をつけて、関数を定義できます。 関数名は変数名と同様に、できるだけ分かりやすい名前をつけるべきです。
関数は引数、戻り値の有無により細かく言えば下記の4種類になります。
それぞれの定義形式は次の通りです。
〇 関数名()
処理1
処理2
処理3
・・・
〇に続いて、関数名、()カッコの行 その下の行から関数の処理内容がインデント(字下げ)されて表現されます。
例:
〇 program()
a を出力する
b を出力する
programが関数名。()とカッコの中に何もないのは受け取るデータ(引数)が無いことを表します。
〇 関数名(引数の型: 引数名)
処理1
処理2
処理3
・・・
〇に続いて関数名、()カッコ内に変数定義を記述。その関数の呼び出し時にデータを受け取った状態で動くことになる。 複数のデータを受け取る場合はカンマ区切りで変数定義が記載される。
〇 戻り値の型: 関数名()
処理1
処理2
処理3
・・・
return 戻り値
関数名の前に戻り値のデータ型が記載される。 関数の処理にretrun文が記載される。
〇 戻り値の型: 関数名(引数の型: 引数名)
処理1
処理2
処理3
・・・
return 戻り値
戻り値の型、引数の定義が共に記載される。
〇 greet()
"Hello!" を出力する
関数greetは、Hello!を画面出力する。
greet()
greet()
〇 print_double(整数型: x)
( x × 2 ) を出力する
関数print_doubleは、受け取った値を倍にして画面出力する。
print_double(5)
print_double(8)
ちなみに、呼び出し時に実際に渡すデータ(5や8)を実引数と呼び、 関数内で受け取る変数Xを仮引数と呼ぶ。
実引数「5」で呼び出すと、変数xに「5」が格納された状態で関数が動作する。
〇 整数型: get_fixed()
整数型: ret
ret ← 10
return ret
関数get_fixedは、10を返す。
整数型: value ← get_fixed()
value を出力する
〇 整数型: add_tax(整数型: price)
整数型: tax ← price × 11 ÷ 10
return tax
関数add_tax()は、受け取った値を税込み価格にして返す。
整数型: result ← add_tax(100)
result を出力する
呼び出し側add_tax(100)は、関数の動作が終わると整数型の戻り値データになる。 それを受け取る形でresultへの代入を行っている。
〇 整数型: triangle_area(整数型: base, 整数型: height)
整数型: area ← base × height ÷ 2
return area
関数triangle_areaは、底辺と高さを受け取り、三角形の面積を計算して返す。
整数型: area ← triangle_area(5, 4)
area を出力する
渡すデータの型と個数を関数定義と一致させる必要がある。 ここでは整数型データが2つ。
呼び出し時の順番通りに仮引数へ渡される。
triangle_area(5, 4) という呼び出し方をしているので、 変数baseには5 変数heightには4 が代入されて関数が動く。
triangle_area(4, 5) という呼び出し方をしたらbaseには4、heightには5が代入される。
〇 greet()
"Hello!" を出力する
greet()
greet()
〇 print_double(整数型: x)
( x × 2 ) を出力する
print_double(4)
〇 整数型: get_fixed()
整数型: ret ← 5
return ret
整数型: val ← get_fixed()
val を出力する
〇 整数型: add_tax(整数型: price)
整数型: tax ← price × 11 ÷ 10
return tax
整数型: result ← add_tax(100)
result を出力する
〇 整数型: triangle_area(整数型: base, 整数型: height)
整数型: area ← base × height ÷ 2
return area
整数型: area ← triangle_area(6, 4)
area を出力する
〇 整数型: rectangle_area(整数型: length, 整数型: width)
整数型: area ← length × width
return area
整数型: area ← rectangle_area(5, 3)
area を出力する
〇 整数型: calculate_bonus(整数型: salary, 整数型: rate)
整数型: bonus ← salary × rate ÷ 100
return bonus
整数型: bonus ← calculate_bonus(200, 5)
bonus を出力する
〇 整数型: perimeter(整数型: length, 整数型: width)
整数型: peri ← ( length + width ) × 2
return peri
整数型: peri ← perimeter(7, 3)
peri を出力する
ペリメーター(英:perimeter):境界
〇 実数型: calc_circle_area(実数型: radius)
実数型: area ← radius × radius × 3.14
return area
実数型: result ← calc_circle_area(2.0)
result を出力する
〇 実数型: calc_price(整数型: price, 実数型: rate)
実数型: discounted ← price × (1.0 - rate)
return discounted
実数型: result1 ← calc_price(100, 0.1)
実数型: result2 ← calc_price(200, 0.25)
result1 を出力する
result2 を出力する