コンピューターサイエンス 学び直し 変数・関数編
今月からコンピューターサイエンスを学び直しているので、そのアウトプットをしようと思います。
そもそもコンピュータサイエンスとは、「コンピュータを利用して様々な課題を解決する方法を研究する学問」と言えます。
コンピュータサイエンスが扱う分野は、プログラミング言語やフレームワークだけでなく、ハードウェアや設計パターン、アルゴリズムなど多岐にわたります。
これらを組み合わせ、最適な選択をし、社会的学術的な課題を解決していくことが、コンピュータサイエンスの本質です。
今回は、プログラムの構成要素となる「変数と関数」について解説していきます。
変数
前の記事ではデータについて、基本的なことや計算方法を学びました。
しかし、より複雑な計算やソフトウェアを作るためには、計算結果を保存したり、再利用したりする必要があります。
それを実現するために、変数や定数などが必要になります。
変数はラベルが貼られた入れ物のようなもので、名前をつけてデータを参照したり操作したりできます。
例えば、const myWeight = 68;
と定義することで、myWeightという単語を使用してデータの処理ができるので、人間的に可読性が増します。
そして、値を上書きできるものを変数、できないものを定数と呼びます。
ちなみに、変数名には以下のようなルールがあります。
- 英字、数字、アンダースコア(_)から構成される
- 数字から始めることはできない
- 予約語(プログラム言語が予約しているキーワード)と同じ名前にすることはできない
予約語とは、プログラミング言語に定められている識別子のことを言います。
例えば、null、void、functionなどの単語です。
メモリとアドレス
変数はメモリ内の特定の領域に割り当てられ、その領域には特定のデータが保存されます。
コンピュータには、データを保存・処理するために「メモリ」と呼ばれる重要な部品があります。
メモリは、小さな単位に分かれた「セル」と呼ばれる場所にデータを格納することができます。
そして、1 つのセルは8 ビットのデータを格納することができます。
メモリ内の各セルの位置は、0x00001234 のように一意のアドレスで識別されています。
プログラムが変数や定数を作成するとき、それらはメモリ上に確保されます。
そして、変数はメモリアドレスの値を持ちます。
各プログラムは自身の「記憶域(ストレージ)マップ」または「シンボルテーブル」を持っており、このテーブルは変数名とそれが指すメモリアドレスとを対応付ける役割を果たします。
例えば、以下のJavaScriptのコードを考えてみましょう:
let x = 10;
const y = 20;
ここで、変数10と定数20はそれぞれメモリ上に保存されます。
xの値が10、yの値が20という情報はシンボルテーブルに保存され、プログラムがこれらの変数を参照するたびに、コンピュータは対応するメモリアドレスにアクセスして値を取得します。
さらに、letで宣言された変数xは再代入可能です。
この場合、新しい値は同じメモリアドレスに保存され、古い値は上書きされます。
しかし、constで宣言された定数yは再代入不可能で、一度値が割り当てられるとその値は変更できません。
それはそのメモリアドレスに保存された値が不変であることを意味します。
このように、メモリはプログラムの実行中に一時的に情報を保存し、後で参照または変更する場所を提供する重要な役割を果たしています。
宣言
それでは、プログラム内で変数を使用する方法を解説していきます。
プログラム内では、変数は宣言、代入、参照という 3 つの主な操作が行われます。
まず、プログラム内でどのような名前の変数を用いるか予め示すことを宣言といいます。
変数を宣言することで、プログラム内でその変数が使用されることが許可されます。
つまりは、その変数を格納するためのメモリが確保されます。
変数を宣言するときは、変数名とその変数が保持するデータ型を指定する必要があります。
データ型は、変数が保存するデータの種類を指定するもので、プログラミング言語によって自動的に設定されることもあります。
例えば、動的型付け言語という言語を使用する場合、データ型を指定する必要はありません。
代入
宣言した変数に対して、データを関連付ける操作のことを代入といいます。
多くのプログラミング言語では、変数の宣言と初期化を同時に行うことができます。
初期化とは、変数に初めてデータを代入することを指します。
代入には、等号(=)演算子が使われます。
参照
変数に代入されたデータを使う際は、設定した変数名を使ってデータを取得できます。
そのため、変数を式の中に組み込んでデータ値として使うこともできます。
関数
関数とは、特定のタスクを実行するために設計された独立した処理のブロックのことです。
関数を使うことで、同じコードを何度も書かなくてもよくなり、プログラムがよりシンプルで効率的になります。
関数は、入力データを受け取り、処理を実行し、出力を返すものです。
なので関数を定義する際、原則として以下の 3 つの情報が必要になります。
- 関数名と出力のデータ型
- 引数とそのデータ型
- 関数の処理内容
関数を使用する場合、プログラム内で関数を定義した後、その名前を呼び出すことで、コード内の任意の場所で使用することができます。
関数が呼び出されると、その関数は与えられた入力を受け取り、対応する出力を返します。
これにより、同じコードを何度も再利用することができ、時間を節約し、コードをより整理して保守しやすくすることができます。
if 文
プログラムにおいて、条件をテストして結果に基づいてコードを分岐させるために、述語と呼ばれるブール値を返す関数や式を使用することがあります。
そして、述語とif文の組み合わせがよく使用されます。
if 文とは、「もし X ならば Y せよ。さもなくば Z せよ」といった条件分岐を実現するために使われます。
短絡評価
短絡評価とは、必ずしも全ての式が評価されないことを指します。
論理積 (&&) や論理和 (||)を使用する場合、短絡評価が適用されます。
例えば、論理和を使用して左側がtrueの場合右側の処理は実行されません。
この短絡評価を利用することで、第二引数に時間のかかる処理を書く場合に、無駄な関数を呼び出さずに済むことがあります。
また、可読性も上がるのでよく使われます。
ライブラリ
ライブラリとは、プログラムを作るために必要なデータや関数を集めたもののことです。
プログラムに必要な機能を一から作るのは大変なため、既に用意された機能を使ってプログラムを作ることができます。
例えばMath ライブラリは、プログラムでよく使われる数学関数をまとめたJavaScriptのライブラリです。
ライブラリ関数を使用する場合には、以下の 3 点を理解することが重要です。
- その関数の目的
- 必要な入力
- 生成される出力
ライブラリの公式ドキュメントには、これらの情報が記載されています。
このように、ライブラリを使用することで、より効率的にプログラムを開発することができます。
まとめ
今回はプログラムの基本となる「変数と関数」について解説しました。
このように、変数と関数を使うことで、プログラムをよりわかりやすく、効率的に記述することができます。
また、変数と関数を使用することで、どのようなプログラムも書くことができます。
引き続き学んだ内容をアウトプットしていこうと思うので、参考にしてください。
宣伝
0からエンジニアになるためのノウハウをブログで発信しています。
また、YouTubeでの動画解説も始めました。
インスタの発信も細々とやっています。
興味がある方は、ぜひリンクをクリックして確認してみてください!
Discussion