思考錯誤

すべてはどうでもよくなる

「プログラミングの基礎」読みほぐし②

設定を変更することによって、 Markdown 記法でブログを書くことができるようですね。早速変更してみました。
さらにリアルタイムプレビューまであーるじゃないですか。リアルタイムというにはあまりに遅すぎますがね。Atom で書きたいよー。

さて、プログラミングの学習は毎日続きます。

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

第三章 変数の定義

今回から目次をいれます。(今日やることねっ!)

目次

  • 3.1 変数の必要性
  • 3.2 変数定義の構文
  • 3.3 変数の実行方法
  • 3.4 ほかの言語の変数との違い

3.1変数の必要性

しょうもない

例えば、Aさんは時給900円のアルバイトを月20日、1日5h しているとします。今までの方法だと下記のような計算になります。

900 * 5 * 20 ;; // => 90,000

ある日、Aさんの頑張りがフランチャイズのオーナーから認められ、Aさんの給料は次月から900円から950円へUPしました。Aさんの次月の給料計算は下記のようになります。

950 * 5 * 20 ;; // => 95,000

はい。
変数を定義していた場合は下記のようになります。

let a_no_zikyu = 900 ;; // Aさんの時給はもともと900円

a_no_zikyu * 5 * 20 ;; // => 90,000

let a_no_zikyu = 950 ;; // Aさんの給料950円にUP

a_no_zikyu * 5 * 20 ;; // => 95,000 

ほらね。便利でしょ。変数。
例が悪いですかそうですか。

3.2 変数定義の構文

さっきも出てきましたが、Ocaml ではこのように変数を定義します。

let jikyu = 900 ;;
// => val jikyu : int = 900
// 変数 jikyuが定義されました。
// 変数 jikyu は int 型で、900 という値が入っています。
// (って言ってる)

どうやら一度定義した変数に値を代入する場合にも、let は必要のようですね。

3.3 変数の実行方法

変数を含んだプログラムがどのように実行されていくか見ていきます。
まず下記のようなプログラムがあるとします。

let jikyu = 900 ;;

(25 * jikyu) + (28 * jikyu) + (31 * jikyu)
  1. Ocaml インタプリタはまず先頭の (25 * jikyu)を計算しようとします
  2. jikyu は変数なので、即座に計算することができません。シクシク
  3. Ocaml インタプリタは変数 jikyu を見て、一番目のjikyu の値を900に書き換えます。
  4. この時点で下記のような状態
(25 * 900) + (28 * jikyu) + (31 * jikyu)

はい。そしたら、一個目の計算を実行します。

22500 + (28 * jikyu) + (31 * jikyu)

はい。そしたら二個目の計算に入ります。
これを繰り返します。

ケース1
22500 + (28 * 900) + (31 * jikyu)
22500 + 25200 + (31 * jikyu)
47700 + (31 * jikyu)
47700 + (31 * 900)
47700 + 27900
75600

Ocaml インタプリタにおける実行は、このように変数を値で置き換えながら進んでいきます。
ぼくたちが数学で変数を使って計算するのとまったく同じですね。
あれ?数学で変数を使ったことなんてあったっけ・・・。

ケース2(練習問題)
let e = 2.718 ;;

1. +. e *. 2.
1. +. 2.718 *.2
1. +. 5.436
6.436

3.4 他の言語の変数との違い

Ocaml の変数は、他の言語でいう「定数」に近いもののようです。
ぼくは JavaScriptPHP を少し書いていた時期もありましたが、変数って書き換えることができるのが普通なのだと思っていました。

どうも、関数型言語における変数は、一度定義したら未来永劫その値を持ち続けるもののようです。

みなさま(ぼくも含め)は、変数の値を書き換えること無しで、どうやってプログラミングをしろと?とお思いかと思います。

しかし、この本では変数を使わなくとも十分プログラミングできてしまうことを体感できます。たぶん。
むしろ、変数が書き変わらないことによって、見通しがよくなり間違いやバグを減らすことができるのではないでしょうか。

従来のプログラミング言語の信頼性を落としているのは、便利だと思ってガンガン使っている変数の書き換えが原因であることが多いようです。

おわり

今日はここまでです。亀のように進んでいきます。
ああ平日に勉強することができるシアワセ(奇跡)。

この本は全24章あります。
一日一章ペースでいけば 9/5 くらいに終わらせられそうです。

朝勉強できるようになるとなお良し、ですね。