LoginSignup
1
0

More than 3 years have passed since last update.

初心を忘れた人が改めてソースコードについて考えたお話 「名前編」

Last updated at Posted at 2019-08-10

プログラミング、初級者++向けの記事です。
証拠に基づいた記事ではございませんので、ポエムに近い印象があったらすみません。

名前について

名前付け、苦労してますか。
その苦労はとても良い経験であると、個人的に考えます。
プログラミングにおいて、いえ、ビジネスロジックにおいても、名前付けは重要かつ繊細な作業です。一つのクリエイティブな作業でもあるでしょう。

  • 一般的な慣習に従うのか
  • 新しい名前を生み出すのか

たったそれだけの事で、後々の効果はバタフライの如く変わってしまうものです。

名前と意味

名前には、意味があります。
いえ、正確には、人が名前に意味を付けるのです。
では、意味とは一体何なのか・・?。

ここで重要なのが、対応(マッピング)という考え方です。
例えば「猫」という名前には、「生物学における、あらゆる猫科の動物」という意味がありそうです。ただ、シンプルに考えてみると、人が「猫」であろう動物を指差して、「猫、と言った」事が起源ではないでしょうか。
ただし、文脈と呼ばれる存在により、名前の意味が変化します。

例えば、という名前と生物学を与えて、意味を返す関数を考えます。

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#における属性についてのメタプログラミングと呼ばれる方法は、一般的に認知されましたが、過去のプログラミング言語においては、メタプログラミングはプログラマーのテクニック、思いやりとして表現されていたのです。
(表現が今は無くなった、と暗に言ってはいません)

名前と形式

形式は、コンパイラーが形式の意味を解釈してくれます。
しかし、形式と対になっている名前の意味は、人が決めて、解釈しなければなりません。

その名前は、その文脈において、一体何を意味すべきか

名前付けには、想像以上の価値があります。
自分の名前を思い出して下さい。公的には名前を変えられますが、ほとんどの人は、名前を変えずに数十年という歳月を生きます。プログラムも自分が生きた証のように、残る事があります。
一般的、慣習的な名前が悪いのではありません。
新しく、斬新な名前が良いのではありません。
そこに「自分が考えられる限りの思いやり、意味を込めて付けた名前」が、良いのです。

途中からポエムのような形になってしまい恐縮です、お読み頂きありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0