プログラミング、初級者++向けの記事です。
証拠に基づいた記事ではございませんので、ポエムに近い印象があったらすみません。
名前について
名前付け、苦労してますか。
その苦労はとても良い経験であると、個人的に考えます。
プログラミングにおいて、いえ、ビジネスロジックにおいても、名前付けは重要かつ繊細な作業です。一つのクリエイティブな作業でもあるでしょう。
- 一般的な慣習に従うのか
- 新しい名前を生み出すのか
たったそれだけの事で、後々の効果はバタフライの如く変わってしまうものです。
名前と意味
名前には、意味があります。
いえ、正確には、人が名前に意味を付けるのです。
では、意味とは一体何なのか・・?。
ここで重要なのが、対応(マッピング)という考え方です。
例えば「猫」という名前には、「生物学における、あらゆる猫科の動物」という意味がありそうです。ただ、シンプルに考えてみると、人が「猫」であろう動物を指差して、「猫、と言った」事が起源ではないでしょうか。
ただし、文脈と呼ばれる存在により、名前の意味が変化します。
例えば、猫という名前と生物学を与えて、意味を返す関数を考えます。
intention = f('猫', '生物学')
次に、猫という名前と猫を指差して「猫」と言ったの意味を返す関数を考えます。
intention = f('猫', '猫を指差して「猫」と言った')
どちらも、関数fにとっての文脈は、与えられた引数だけと決めます(グローバルやスタティックな変数、定数は影響しないとします)。
関数fは、受け取った引数から、出来るだけ意味を推論する仕様としましょう。
こうして、二つの対応を作る事が出来ました。
もし関数fが、自分だったとしたら、どういう意味を返してくれるでしょうか。
引数の意味を知らなければ、曖昧な応えがあるでしょう。「分からない」というエラーが返ってくるかもしれません。
そう、お気付きかもしれませんが、実は関数fですら、文脈の一つになっているのです。
過去、私個人が名前付けの強さを感じたのは、WIN32SDKというWindows用のSDK(software development kit)でした。
このSDKのソースコードはC言語で書かれており、マクロと呼ばれるプリプロセッサを駆使していました。
マクロというのは、シンプルに言えばテンプレートです。単に文字、文字列をコンパイル前に置き換える事がメインです。
そのマクロは、文字を置き換える事がメインであるのに、何と何も置き換えないでソースコードから消えるだけのマクロがSDKのソースコードに書いてあるじゃありませんか。
この時の私は、混乱しました。中級者にすらなれていないと自負があり、ろくな学もない自分には、当然の反応でした。
インターネットも発達していない時代に、少しの情報もググれずに「意味が分からない」という文字列が頭のスタックを埋め尽くし、スタックオーバーフローしたのでした。
しかし、インターネットのおかげか、プログラミングの文化は加速しました。C言語よりも進んだ高級言語が次々と生まれ、意味の加速まで行われたように感じました。
しばらくして、JAVAやC#を触るようになり、故郷を思い出すかのように、WIN32SDKを見ました。そうすると、意味不明でしかなかった「あのマクロ」が、腑に落ちたのです。
「ああ、意味を付けていたのか」と。
コンパイル前に消えてしまうだけの邪魔でしかないマクロ、そういう価値観は消えていました。
その「意味」というのは、他ならぬ文脈であり、一意性のためでありました。
例えばint
という整数の型をわざと名前を変えてtypedef int age;
とするのは、一つの思いやりです。
例え同じ整数の型であっても、typedef int year
とした場合では、age
型とyear
型では、意味に違いがあります。
意味に違いがあるという事は、「どこかの文脈では、変数の扱い方を変える必要がある」という事です。
今でこそ、JAVAにおけるアノテーションや、C#における属性についてのメタプログラミングと呼ばれる方法は、一般的に認知されましたが、過去のプログラミング言語においては、メタプログラミングはプログラマーのテクニック、思いやりとして表現されていたのです。
(表現が今は無くなった、と暗に言ってはいません)
名前と形式
形式は、コンパイラーが形式の意味を解釈してくれます。
しかし、形式と対になっている名前の意味は、人が決めて、解釈しなければなりません。
その名前は、その文脈において、一体何を意味すべきか
名前付けには、想像以上の価値があります。
自分の名前を思い出して下さい。公的には名前を変えられますが、ほとんどの人は、名前を変えずに数十年という歳月を生きます。プログラムも自分が生きた証のように、残る事があります。
一般的、慣習的な名前が悪いのではありません。
新しく、斬新な名前が良いのではありません。
そこに「自分が考えられる限りの思いやり、意味を込めて付けた名前」が、良いのです。
途中からポエムのような形になってしまい恐縮です、お読み頂きありがとうございました。