プログラミングを学び始めた当初、C#とかJavascriptとかのプログラムを見たときに、
〇〇.△△
といったコードが書かれていて、この「ドット」の意味がわかりませんでした。
本記事では、上の文がどういう意味なのかについて書いています。
目次
〇〇.△△の意味
これについて知るためには、「クラス」という概念を知る必要があります。
「クラス」とはなにかというと、「自分の中に値や関数を持ったもの」で、intとかstringみたいな、データ型の「型」に相当するものです。
クラスは、すでに用意されているもの、人が作ったもののほか、自分で好きに作ることもできます。
クラスはそれぞれ、自分の中に変数と関数を持ちます(「メンバ」「プロパティ」「フィールド」とか、いろいろ呼び方はありますが、詳しい使い分けは筆者も分かりません)。
例えば以下のような、Humanというクラスがあったとします。
class Human{
// 年齢
int age;
// 引数に渡したご飯を食べる
void Eat(food){
// なんか処理が書いてある
}
}
このHumanは、「年齢」というint型の変数と、「ご飯を食べる」というvoid型の関数を持ったデータ型です。
あとはint A = ...と宣言するのと同じノリで、
Human taro = ...;
と宣言してあげれば、Human型のデータ taro を用意できるわけです(このtaroを「インスタンス」と呼んだりします)。
くどくどクラスについて説明しましたが、ようやく「〇〇.△△」の意味の説明です。
例えばあなたが、「taroの年齢を知りたい」と思ったら、
int taroAge = taro.age;
と書くことで、taroAgeにtaroの年齢情報をいれることができます。
一方関数については、
taro.Eat(おにぎり);
とすれば、taroのEat関数に、おにぎりを食べさせた場合の処理をさせることができます。
こんなふうに、「あるクラスのインスタンス A の、a という変数or関数にアクセスする」ということを表現しているのが、A.aという文になります。
まとめ
〇〇.△△ = 「〇〇の△△にアクセスします」という意味
アクセスするものが変数ならなにかに代入したりして使えるし、関数ならそれを使うことができる。
余談
筆者の個人的なイメージの話になりますが、この〇〇.△△という書き方は、ディレクトリ……フォルダとかファイルのパスの書き方によく似ています。
インスタンスの直下にある変数にアクセスしたければ、A.aとすればいいですが、そのインスタンスがさらに別のインスタンスを持っている場合はよくあります。
例えばUnityを触っている人は、
gameObject.transform.position
こういった文を見たことがあると思います。
これなんかはインスタンスの入れ子構造の最たる例で、
「gameObjectが持っているtransformが持っているposition」を取得しています。
これと同様に、PCでなにかのファイルにアクセスしたいとき、ファイルパスは
Users\user\デスクトップ\仕事\資料\その他\閲覧禁止\20240326.mp4
といったふうに、「フォルダの中のフォルダの中のフォルダの中の……ファイル」と表現できます。
実際寄せているのかもしれませんが、けっこう似てませんか?