Open3

[読書ノート]コーディングを支える技術: 成り立ちから学ぶプログラミング作法

🍤🍤

比較から学ぶ

プログラミング言語の教科書にはいろいろな約束事が書かれていますが、それは普遍的な絶対の約束ではありません。「今のところこういう約束にしておいたほうが楽だと思うので、そうしましょう」ということにすぎません
「比較から学ぶ」とは、特定の言語でプログラミングを学ぶのではなく、複数の言語を比較しながら学ぶことです。これによって、何が言語によって異なることなのか、何がいくつもの言語に共通なことなのかを学ぶこと
ができます。
「歴史から学ぶ」とは、言語がどう変わったか、変わる前にはどういう問題点があったかを学ぶことです。これによって言語が持ついろいろな機能が「なぜ」生まれたのか学ぶことができます。

🍤🍤

人間にとって自然な記法で数式を書けるようにするために「掛け算は足し算より強い」などのルール(文法)が導入された

同じ「1足す2に3を掛ける」という処理でも、言語によって見かけがかなり違います。しかし構文木で表現すればほとんど同じです。これらの言語で違いがあったのは「どういう文字列を書いたらどういう構文木ができるか」というルールです。これが文法です。

🍤🍤

処理の流れのルール

1960年代後半、この「人間がプログラムを楽に読み書きできるようなルールを作ろう」という流れの中で「構造化プログラミング」が生まれます。

  • 構造化プログラミングとは、if文やwhile文などのルール(構文)を導入することで、コードの構造をわかりやすくしようという考え方のこと。

ifはなぜあるのか。(中略)。「条件が真の場合と偽の場合に処理の流れを分岐する」というパターンはプログラミング上で頻出します。これが手軽で読みやすく書けるようにするために、if……else構文という新しいルールが導入された

  • アセンブリ言語にもif...else的な挙動はある。それは、もし1がxでなかったらyへジャンプするみたいなものが重なっているイメージのもので、想像するだけで混乱しそうになる。

「コンパイルしてアセンブリ言語に変換し、アセンブルして機械語に変換し、リンクしてつなぎあわせて1つの実行可能ファイルにする」という一連の作業をまとめてコンパイルと呼ぶことも多い

  • コンパイルって一言でまとめちゃうけど、そこにも段階がある。

whlie-繰り返しのifを読みやすくする表現。「条件を満たしている間、ブロックの中身を繰り返し実行する」という構文。(中略)多くの言語では、ループを中断するbreak文も用意しています。break文は実行されるとすぐにループを抜けます。これはgotoEND_LOOPと同じ動作です。このようにwhile文もbreak文も「goto文さえあればできること」をやっているだけです。**while文が付け加えた価値は、新しい「できること」ではなく、「読みやすさ」「書きやすさ」**なのです。(中略)if……elseやwhileやbreakは、そういう「制限付きのgoto」なのです
for-数値を増やしながらのwhile