関数と引数・発展編

(0)関数と引数のおさらい

関数とは「何か便利なことをしてくれるプログラムのまとまり」です。
たとえば足し算をする関数「addition」を書いてみましょう。

func addition(x: Int,y: Int) -> Int{
    return x + y
}

この関数を呼び出して、xに「5」、yに「3」を渡すと、x + yの結果である「8」が返ってきます。

この8を関数の「戻り値」と言います。

関数を呼び出すときは以下のように書きます。

//引数xとして3、引数yとして5を渡して関数additionを呼び出す。処理結果を入れておく定数「total」を作成する 
let total: Int = addition(x: 3,y: 5)  
print(total)  //結果をプリントする

プログラミングでは、例えば「計算をする」という処理と「結果を表示する」という処理は別物なので、

結果を導いた後、結果を表示する「total」という変数を作って呼び出しています。

 

関数、引数、戻り値の理解が進んでいないようなら、文法ドリル3をもう一度読み返してみましょう。

 

(1)外部引数名

関数、引数、戻り値について初級の学習は終えました。

以下では、少し発展的な学習をします。

まずは、以下のように関数を書いてください。

func areaOfSquare(a: Int,b: Int) -> Int{
    let result = a * b
    return result
}

これは、長方形の計算をする関する「squareArea」です。

この関数を呼び出してprintするときは、例えば以下のように書きます。

let total = areaOfSquare(a: 10,b: 5)
print(total)

この文は間違っていないのですが、いざ入力をしようとすると「縦の長さを入力するときはa?それともb?」と

悩ましくなります。

そんな時は、関数の1行目を以下のように書き換えれば、縦と横がわかるようにできます。

func areaOfSquare(width: Double, height: Double)

ただし、この書き方でも問題があります。

例えば「縦幅10センチ」入力しようとすると「あれ、この単位ってcmだっけ? mmだっけ?」となるからです。

コメントで「これはcmで書きます」と書いてもいいのですが、読んですぐにわかる方がいいですよね。

そこで、関数の1行目を以下のように書き換えてみてください。

func areaOfSquare(width cm: Double, height cm: Double)

こうすると、縦も横もわかりますし、単位もcmで入力すればいいことが明らかです。

このコードの「width」「height」の部分を「外部引数名」と言います。

外部引数名は省略できます。これまで書かなくて良かったのは、引数の変数名を外部引数名として利用しているからです。

練習問題(制限時間10分)

(1)円の面積を求めるための関数「areaOfCircle」を定義してください。その際、2つの引数名「radius」「pi」の型を小数点に対応させてください。

(2)関数「areaOfCircle」を呼び出し、radiusとpiにそれぞれ「2.0」「3.14」の引数を渡して、その処理結果を定数「total」で表示してください。

答えを見る
[解答]
(1)
func areaOfCircle(radius:Double , pi: Double) -> Double{
    let result = radius * radius * pi
    return result
}
(2)
let total = areaOfCircle(radius: 2.0, pi: 3.14)
print(total)

 

(2)引数名なしで入力できる関数

外部引数名の続きです。

まずは、以下のように関数を書いてください。

func areaOfSquare(_ width: Int, _ height: Int) -> Int {
    let result = width * height
    return result
}

長方形の計算をする関する「squareArea」です。ですが、先ほど学んだ外部引数名の部分が「_」(アンダーバー)に

なっています。これは、引数名を付けずに値を渡すだけで利用できるのが特徴です。

試しに、この関数「areaOfSquare」を次のように書いて呼び出してみてください。

let total = areaOfSquare(10, 5)
print(total)

うまくいきましたか?

Xcodeの機能で、引数を入力しようとすると、下の画面のようにコードのヒントが出てきます。

これは、数字だけ入力しようとすると「どっちが縦だっけ?横だっけ?」となるのを防ぐために、

Xcodeが「最初に入力する数字が横だよ」と教えてくれています。

何でも単位や数字があるとわかりやすいのですが、何度も入力するのは手間がかかります。

また、コードが長くなると書き間違いや書き損じも生まれてきます。

それらを防ぐために、引数名を省略できる機能がついています。

自分でプログラムを書くときに「これは引数名省略した方が便利かな?わかりにくいかな?」と考えてから、

定義をしていくようにしましょう。

練習問題(制限時間7分)

(1)円の面積を求めるための関数「areaOfCircle」を定義してください。その際、2つの引数名「radius」「pi」の型を小数点に対応させてください。その際、外部引数名を「_」にしてください。

(2)関数「areaOfCircle」を呼び出し、radiusとpiにそれぞれ「2.0」「3.14」の引数を渡して、その処理結果を定数「total」で表示してください。

答えを見る
[解答]
(1)
func areaOfCircle(_ radius:Double , _ pi: Double) -> Double{
    let result = radius * radius * pi
    return result
}
(2)
let total = areaOfCircle(2.0, 3.14)
print(total)

 

他にも、乱数を出す「arc4random_uniform」、小数点以下を四捨五入する「round」、累乗の計算をする「pow」などは、

引数名を付けずに値を渡すだけで利用できます。

また、例えばlesson10「乗り換え案内のアプリ」のサーチバーの文法などに「_」が登場しますので、

復習を兼ねて読み返してみるのも良いですね。

 

関数や引数は、文法の中でも難しい部分です。

答えをみないでもコードが書けるよう、繰り返し練習してみましょう。

Begin typing your search above and press enter to search. Press ESC to cancel.

Back To Top