30歳専業主婦の独学エンジニア挑戦ブログ

実務未経験の30歳の専業主婦が独学でエンジニアを目指すブログです

「コーディングを支える技術」を読みました(2)

勉強記録 

今日は「コーディングを支える技術」を読んだので、第7章と第8章をまとめてみました。

 

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)
 

 

<第7章> 名前とスコープ

名前はなぜ必要なのか

変数や関数には「名前」があるが、今では名前があるのが当たり前となっている。
人間にとって物や場所を名前をつけて、その名前で指し示すのは楽。プログラミングにおいても、名前で対象を指定できるよう発展していった。
 

どうやって名前をつけるのか

コンピュータが名前とモノの対応表を持てば、名前をつけることが可能になる。
 

名前の衝突

初期のプログラミング言語では、対応表がプログラム全体で共有されていた。
このように変数の名前が有効な範囲がプログラム全体である状況を、「この変数はグローバルスコープである」と表現する。
これでは変数名がうっかり重複、つまり名前が衝突してしまうという問題がでてくる。
 

名前の衝突を防ぐには

プログラムが大きくなるにつれて、名前が衝突しないように配慮することは大変になった。
そのために「スコープ」という概念が生まれた。
 
スコープとは
スコープは名前の有効範囲のこと。名前の有効範囲を狭く限定して、管理を楽にしようという考え方。
スコープには動的スコープと静的スコープがある。多くの言語が静的スコープを選んでいる。
 

<第8章> 型

型とはなにか

型は、人間がデータに付けた「追加のデータ」のとこ。
「どういう種類の値か」という情報を追加したのが型の始まり。
 

型のいろいろな展開

ユーザ定義型とオブジェクト指向
言語が用意している基本的な型を組み合わせて、新しい型を作る機能。C言語の構造体はこのようになっている。(ユーザ定義型)
その次に整数などの「データ」だけではなく、関数などの「データをどう処理するのか」も型にまとめるようになった。これが「クラス」で、第二のオブジェクト指向の発明。
 
公開と非公開を分ける
構造体やクラスを構成する型を全部公開するのではなく、最小限だけを公開するということが行われるようになった。
C++Javaのpublicやprivateなどといったアクセス制御のこと。
 
インターフェースへの発展
具体的な実装を持たない型(Javaのインターフェースなど)も生まれた。
 

型のすべての使用を表現する世界が来るか

型ですべての仕様を表現することには成功していない。
データを入力した際の処理時間 や、処理の過程でどれくらいのメモリが必要になるのかなどは、今でも人がドキュメントやソースコードから判断しないといけない。
 

総称型、ジェネリクス、テンプレート

構成要素の型の一部が変わる型、つまり総称型が生まれた。
型を引数にとって型を作る関数なので、型を再利用することができる。
C++のテンプレート、JavaジェネリクスHaskellの型コンストラクタがこの型を作る仕組みといえる。
 

動的型付け

変数に型の宣言が必要なく、同じ変数に整数を入れたり浮動小数点数を入れたりすることができる。
対義語として、静的型付けがある(変数の型の宣言がある)。
 
メリットとデメリット
静的型付けではできなかったような柔軟な処理ができるようになった。(実行時まで型を決めないことや、実行時に型が変わることが可能)
しかし、これは逆にデメリットにもなっている。
静的型付けではコンパイル時に型が決まるので、型の整合性チェックができた。そのおかげで一部のバグは実行前に気づくことができたが、動的型付けではそれができない。
 

型推論

コンパイル時の型チェックは捨てずに、めんどくさい型宣言は減らしたい。
そのためにコンピューターが型を推論するというアプローチがある。OCamlHaskellなど