3回目は、変数です。
数値で初めて「ち」という読み方を憶えたと思ったら「あたい」という読み方が出てきて戸惑う息子くん。name とか number とか英語もバンバン出てきます。user 、 count 、 total 、price …。最早英語の勉強ですね。何個覚えられたかなあ?
変数ってなんだっけ?
さて、義務教育で習って以来、という人も居るかもしれないので、おさらいしておくと、変数とは「値をいれておく箱みたいなもの」です。
toy = 'くまのぬいぐるみ'
print (toy)
# 「くまのぬいぐるみ」と出力されます
上記の例では、toy
という変数に「くまのぬいぐるみ」という文字列を入れて、出力しています。
このように変数 = 変数に代入するものという風に書くことで、変数に値を代入できます。代入できる値は数値だけではなく、文字列なども扱えます。
= (イコール) は等しいという意味ではない
そして、プログラミングでは = は等しいという意味にはならないので混同しないでください。この辺りも、算数を習いたての小学校低学年に教えるにはちょっとややこしい部分かも知れませんね。
あくまで左辺に右辺を代入する、という意味なので頭を切り替えましょう。(じゃあ等しいってどう表現するの?とお思いかもしれませんが、それはもう少し後のレッスンで出てきます。)
変数は文字列ではありません
ここでもうひとつ気をつけたいのが、またも'
クォーテーションの扱いです。
toy = 'くまのぬいぐるみ'
print ('toy')
# 文字列として扱われるので、そのまま「toy」と出力されます
toy
と 'toy'
はまったく別物なので注意しましょう。
変数の名前の付け方
変数名って数字から始まらなければ何でも良いのかと思っていましたが、日本語を使うのも△と書いてあって非推奨?のようですね。
厳密には命名規則(PEP8)がちゃんとあるのでそちらに従いましょう。エラーを出さない最低限のルールとして数字から始まらない文字列、ということです。
# 良い名前の例
toy = 'LEGO'
toy_price = 2000
# 良くない名前の例
1toy = 'LEGO'
omocha = 'LEGO'
1toy
とするとエラーが出ますが、omocha
だと別にエラーにはなりません。
別にエラーにはならないのですが、なるべく分かりやすい名前が良いので日本語のローマ字表記はあまり相応しく無いと言うことでしょうか。他に表現がない場合、例えば bonsai
とか fuji
ならアリなのかと。PEP8に日本語駄目とは明記されていませんがそもそも英語が大前提ということでしょう。
どうして変数を使うのか?
Progateにも、「変数を使う意義」というテキストがあるのですが、これは実際使ってみないとなかなか実感しないかなあと思います。
説明すると、データに名前が付くことで扱いやすくなって、さらに繰り返し使えて変更が簡単、という感じなのですが、説明を連ねてもいまいち分かりにくい部分だと思います。
例えば、おもちゃ屋さんでの会計を考えた時に、お客さん1人が2000円のLEGOと500円のくまのぬいぐるみを買った場合は単純に
2,000 + 500 = 2,500
という計算をすれば良いのですが、お店側の会計システムを考えた場合は、商品の単価(toy_price)と個数(toy_quantity)と商品名(toy_name)そして合計(total_price)を扱う必要が出てくるわけで単純な計算機だけでは記録していけません。さらに言うと購入日(date_purchase)とか、商品コード(toy_id)なども必要になってきますね。
どうして変数を使うのか、というより、変数を使わないと扱えない計算を処理する時にプログラムが使われる、ということだと思います。(もちろん、数字だけの計算だってpython は大得意ですよ。)
より良い変数名を考えましょう
さて、先程の例ではおもちゃ屋さんの会計なので、toy
という単語を用いてみたのですが、会計システムというのはお花屋さんでも服屋さんでもあまり変わりがないので、他のお店でも使えるような、より汎用性のある変数名を考えてみてください。
プログラミング的思考のみを学ぶということ
小学校で変数を知ってしまうと、算数の授業がかったるく感じやしないかとちょっと心配なのですが、変数を知らないとプログラミングをやる意味が無いと言っても過言ではないと思うので避けては通れませんね。
なので、プログラミングが義務教育化すると聞いた時は、え?算数との兼ね合いをどうするのかなーと思ったのですが、あくまでプログラミング的思考を学ぶのであって、プログラミングはやらないとか。
それは、ちょっと、正直すごい微妙だと思います。
もちろん、通常の算数の考え方だけではなく、上記の会計システムのような考え方ができることは今後の社会において役に立たないとは思いませんし、プログラミング的思考の有益さを疑いはしません。
でも、コードなんて書いてなんぼだ、とつい作る側の人間としては思ってしまいます。書いてプレビューして動かしてみて初めて面白いのになあ。面白くなきゃ学ばないし、学ばなければ思考として身につきません。
義務教育化の話を知った時、思い出したのは家庭科での実習もない無味乾燥な授業です。家事というのはプログラミングよりさらにとても奥深く面白いものなのに、上っ面だけのテキストを読ませて何を学ばせようとしているのか、子ども心にさっぱり分かりませんでした。
だから、学校につまんないと思わされる前に、ウチでやるかーと思ったのも、このシリーズを始めるキッカケでした。
ただし、もうすぐ8歳になるうちの子があまり突っかかりもなく、ココまで進んでいるのは前段階として Scratch で遊んでいたり、Splatoon や Minecraft などのゲームに夢中になり、そういうものがプログラムというもので出来ているということを理解し、自分もやってみたいという興味があることが大きいと思います。
それでも、実際にプログラミングをするためには前述した通り、英語力・読解力・四則計算その他の基礎学力が無いと中々厳しいものがあります。実際、彼が今やっている条件分岐のところで流石に頭を抱えていますしちょっと弱音も出てきました。これをマンツーマンでもない学校の授業で超えさせるのは現実的ではないでしょう。
だから義務教育で実際にプログラミング言語を教えないのも無理はないと思います。しかし、学びたいと思う力(好奇心とも言えるでしょうか)は年齢だとか常識だとかを簡単に飛び越えられると私は思っているので、熱いうちに打つのも手ではないかと考えています。
あとこれは子ども向けのように言っていますが、実はプログラミングは幾つになっても学べるものだと思いますし、むしろ社会の成り立ちを知ってから学ぶと捗りやすいと思うので、ぜひ親世代の方も、おじいちゃんおばあちゃん世代の方だって全然OKだと思います。ぜひトライしてみてください。
…なんてつい偉そうに書いてしまいましたが、私もまだ Python でロクなプログラムを書いたことが無いので、一緒にトライしましょう、が正しいですね。
さて次は、変数の扱い方をもう少しやります。