見出し画像

【Swift】 生徒の質問と解決法 〜引数の教え方〜

■はじめに

こんにちは。ふるやです。実際に生徒と話していて出てきた質問シリーズを作っていきます。自分も学んで日が浅いので、まだまだ生徒に近い感覚を持っているのでは無いかな、と思いながら。

数学の授業では生徒がつまづく点は大方わかりますが…codingの説明は難しいですね。前提となる知識の確認やどこでつまづいているのか見極める力などまだまだ不足していますが、こういうことを考えると自分の力がつくので、悪くありません。

どこで出したらいいのかわからなかったのですが、うちの使用教材はこれです。

Swiftによるアプリケーション開発:入門編

この教材の特徴はまた別の記事で紹介しますが…最新版ではないんですこれ。Xcode10って書いてありますし。

Xcode11対応のブックはこちら。英語版しかないので、学校で使うには使いにくいのです。内容は大型アップデートがなされていますので、期待しまくっています。ただ、必要時間は160時間だとか。これも日本の現状に合わせるのが難しそうなので、カリキュラムに組み込む際の課題の一つでしょうね。課題は盛りだくさんだけど、完成度は高いよ!

では本題に入りましょう。

■生徒の疑問点

・関数が「処理をまとめること」なのは分かったけど、引数って何なの?

・引数って、何をしたいときに使うの?

すごくわかる。関数はまとめる時に使う。これはオッケー。でもいつ必要になってくるのかわからないよね。動機があってCodingするわけですから。去年の10月くらいに何度も復習したよ…引数とか戻り値の組み立て方が分からなくて。

では、やり取りの流れを見ていきましょう。

■解決策

T:先生 S:生徒 です。

T:月々のお小遣いっていくらでしょう。毎日貰っている人いますか?     S:毎日300円もらっています。                     T:今日はこれを題材にしましょう。

・手順1

スクリーンショット 2020-10-22 16.30.21

T:1日あたり300円とするので、変数 moneyParDay を300円としました。

・手順2

スクリーンショット 2020-10-22 16.34.33

T:1ヶ月が31日だとして、変数 dayCounts を 31 として進めますね。1ヶ月のお小遣いを計算するにはどうすればいいですか?

S:300 × 31 ですが、コードで記述すると moneyParDay × dayCounts ですね。こうなります。ついでに出力します。

T:しっかりと出力は 9300 になっていますね。

・手順3

スクリーンショット 2020-10-28 17.14.39

T:関数にしていきましょう。計算と出力をまとめて、いつでも計算結果を出せるようにしました。(この関数必要なくない…?)

S:コードをまとめたんですね!

T:(わかってくれた)

T:でも、この関数だと出力されるのは毎回9300円ばかり…。これでは作った意味がありません。1ヶ月の日数は月によって変わるので、日数を入れると計算してくれるコードがあると便利じゃないですか?例えば28日を入れると計算してくれるような…28入れてみようこんな感じで。関数の()に日数を入れることができたらいいよね。やってみよう。

スクリーンショット 2020-10-28 17.51.44

S:エラーですね。

T:そりゃそうじゃ。

・手順5 そして引数へ

スクリーンショット 2020-10-28 18.02.52

T:先ほどの4行目の変数dayCountsを消します。日数を入れるとは、このようにmoney関数の中にあるdayCountsの部分に日数を入れたいわけです。そうするにはこうコードを変えます。money関数を使うときに、dayCountsという数を入力してね!という指示です。

スクリーンショット 2020-10-28 18.24.29

S:エラー吐きまくってますけど…

T:これは、money(dayCounts)と書いた瞬間にXcodeが「dayCountsを使うのはわかったけど、型がわからないよ!」と怒っています。ですので…

スクリーンショット 2020-10-28 18.21.06

T:dayCountsには整数(Int)が入りますよとこのように記述します。

S:まだエラーが出てますが。

T:money関数は「dayCountを使う」とされているのに、10行目ではdayCountsに数字が入っていません。というわけで

スクリーンショット 2020-10-28 18.46.12

T:dayCountsは28日ですよ、と。これで解決しましたね!あとはこの28の部分を変えて遊んでください。

■まとめ

お疲れ様でした。本当は print("1ヶ月のお小遣いは/(moneyParMonth)です")  と出力を記述してもよかったのかなーとか、もっといい記述があるから最初の流れは不自然じゃない…?と、いろいろ改善点はありますが、こんな感じでいかがでしょう。



この記事が気に入ったらサポートをしてみませんか?