プログラミングの基本

プログラミングの基本について概要をメモ書きしています。

※目次をクリックすると目次の下部にコンテンツが表示されます。

データ型、型推論、動的言語、動的型付け
●変数とは?
 
・扱われるデータを一定期間記憶し、必要なときに利用できるようにするために、データに固有の名前を与えたもの。
 
●変数の宣言
 
〇データ型
・データ型を指定する必要がある言語とない言語がある。
・データに対して行える処理はデータ型によって異なるので、データ型を厳密に検査することで、誤ったプログラムを書いてしまうことを防止するのに役立つ。
 
〇型推論
・静的な型付けを持つ言語において、変数や関数の型を宣言しなくてもそれを導くのに使われた関数の型シグネチャなどから自動的に型を決定する機構。
・推論に失敗するとその時点でエラーを報告できるため、少なくとも誤った型を用いる事によるバグは回避できる。
・多くの場合、型推論は変数の宣言と代入が一度にまとめて行われることが前提となる。
 たとえば a = 1 + 2 という文があれば整数同士の加算結果だからaは整数といった具合に、文脈などから(すなわち、静的に)可能な限りで型を推論していく。
・C#、Javaなどは型推論を持つ。
 
〇動的プログラミング言語
・一般に動的プログラミング言語といわれるような処理系では変数ではなくデータの方に型をもつ。
 変数は型を持たず、実行時に変数の指す先であるデータが持っている型の情報に従って、それが文字であれば文字に対応して、整数であれば整数に対応して、といったように動く。
・一般に動的プログラミング言語では型の特性に合わせた最適化(例えば常に浮動小数点レジスタを用いるなど)ができないので、実行速度という面では静的型に劣るなどと主張される。
 
〇静的型付けと動的型付け
・プログラムを実行前に型検査を行うのが静的型付けであり、プログラムを実行しながら型検査を行うのが動的型付け。
 
●動的プログラミング言語、動的言語
 
・通常他の言語ではコンパイル時に行うことを実行時に行う言語。
・動的言語と動的型付けは同じ概念ではないし、全ての動的言語が必ずしも動的型付き言語というわけではない。
・アセンブリ言語、C言語、C++、初期の Java、FORTRAN などは動的プログラミング言語ではない。

変数のスコープ、寿命
●変数のスコープ
 
・変数がソースコード内のどこで使えるかを示す概念。
・一般に、変数はその変数に対して定められたソースコードの特定の範囲内でしか使用することができない。その変数が使用可能な範囲が、その変数のスコープ。
 
●スコープの種類
 
〇globalスコープ
・プログラムの「全体」から見えるスコープ。
・一般にグローバル変数は、その非局在的な性質ゆえに、好ましくない実践だと考えられている。
・グローバル変数を使用すると、ソフトウエアのソースコードを理解することが困難になる。
 グローバル変数の値はプログラムのどこからでも変更できるため、グローバル変数がどのように使用されているか理解するためには、プログラム全体を把握しなければならない。
 
〇fileスコープ
・プログラムを記述したファイルの内側でのみ参照できるスコープ。
・プログラムが複数のファイルから構成される場合は他のファイルから参照することはできない。
 
〇localスコープ
・ある関数やブロックの範囲内に限定されたスコープ。
・何を持って範囲を与えるかは言語により様々だが、一般に入れ子のローカルスコープは外側を参照できるのが普通である。このとき兄弟関係にあるスコープは見えない。
・変数宣言が必要な言語の場合は宣言文以降にスコープが制限される場合が多い。
 
〇instanceスコープ
・クラスベースのオブジェクト指向言語で、各インスタンス毎に割り当てられた変数が所属メソッド(メンバ関数)からのみ参照されるスコープ。カプセル化。
・フィールド、データメンバ、メンバ変数。
 
〇classスコープ
・クラスベースのオブジェクト指向言語で、あるクラスの定義全体から参照できるスコープ。
・インスタンススコープと異なり変数が共有されるので、ある種の制限されたglobalスコープと考えることができる。
・静的メンバ変数、静的フィールド。
 
●静的スコープと動的スコープ
 
〇静的スコープ
・構文スコープ(lexical scope)。構文上で決定されるスコープ。
・ブロックなどの構造を持つプログラミング言語では、あるブロックの内側で定義された変数はそのブロックの外側から操作することができないのが普通。
 
〇動的スコープ
・実行時の関数の親子関係で名前を導入が導入されるスコープ。
・動的スコープは、静的スコープに加え、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープ。
 
●変数の寿命
 
・変数がプログラムの実行時においていつ使えるかを規定する概念。
・多くの場合、プログラムの処理がその変数のスコープ内に入ると(その変数の値を保存するためのメモリ領域が確保されるなどして)変数が存在し始め、処理がスコープから出ると変数の存在が消えるというように、変数のスコープに合わせて寿命が決められる。(自動変数)
 一方、スコープとは関係なくプログラムの実行が始まったときから終わるときまでずっと存在し続けるようなものもある(静的変数)。

定数、リテラル
●定数
 
・変数同様、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたもの。
・変数とは異なり、一度初期化するとその内容を変更することはできない。
 
〇定数の初期化
・使用する定数の名前と対応するデータを明示する。
・変数同様データ型を指定することもある。
・代入するデータにはリテラルのほかに変数も使用することができる。
変数を代入した場合は初期化時の変数の内容がコピーされる。
 
●リテラル
 
・ソースコードに直接記述するデータはリテラルと呼ぶ。
 
●リテラルの例
 
〇数値
・整数、浮動小数点数など
 
〇文字型
・’A’のようにシングルクォートで文字を挟み、エスケープシーケンスが使える場合が多い。
 
〇文字列型
・”string”のようにダブルクォートや、シングルクォートで文字列を囲む場合が多い。
・一つの言語に複数の記述法があり、特殊な記法が用意される場合もある。その際にはエスケープシーケンスの処理を行うか、式展開を行うか、文字列の終わりの解釈などがそれぞれ異なる。
・改行やホワイトスペースをそのまま反映する文字列の記法をヒアドキュメントと呼ぶ。
 
〇関数
・無名関数を表現する。
 
〇正規表現
・/regex/のようにスラッシュで挟む。
・「大文字小文字を区別しない」等々のオプションが後ろに付けることができるような仕様のことが多い。
 
〇配列
・[1,2,3]のようにブラケットで囲む場合が多い。
 
〇連想配列 (オブジェクト、オブジェクトリテラル)
・{“hoge”:1 , “piyo”:2}のような書き方が一例。
・JavaScriptのオブジェクト表記法からJSONが発見された。
 
〇空値
・null、nil
 
〇真偽値
・false/true

配列
●配列
 
・複数の値を格納するのに用いられる。
・添え字は一般に通例0か1始まりの(非負)整数である。
文字列など他のデータ型を添え字のように使用できる配列を連想配列という。
 
●連想配列
 
・添え字にスカラー数値以外のデータ型(文字列型等)も使用できる配列。
・ハッシュ、マップとも呼ばれる。
・要素とそれを紐付けできるような値(キーと呼ぶ)のペアで表され、キーによって目的の値を求める。
 
●イテレータ
 
・プログラミング言語において配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください