CakePHP5入門【コラム③】定数と命名規則
C菜
このときプログラムでは変数$tax_rateに0.1021を代入して使ってるんですけど、関数呼出しの際、いちいち引数として渡すのは面倒です~
B美
そういうわけの分からない数字のことを「マジックナンバー」って言うの
(魔法の数字…つまり、「意味の分からない数字」という意味)
もしも「マジックナンバー」がプログラム中に散りばめられていると、将来その数字(この場合、税率)が変更されたときに大変なことになるからね
(全て変更していく労力が…(笑))
A子
変更しなきゃいけなくなったとき、変えるのはその一ヶ所だけだし…
B美
ただ、そういう場合は「変数」に格納するのではなく、「定数」化したほうが良いわ
「変数」ってのは、プログラムを実行中にその値が変化する(かもしれない)ものだからね
C菜
B美
その値(0.1021)に対して、別の名前を付ける感じね
<?php
define("TAX_RATE", 0.1021); echo TAX_RATE; ?> |
を実行確認してみれば分かるわよ
C菜
もしかして、プログラム内で「TAX_RATE」と記述されたところは「0.1021」に置き換えられるってことでしょうかぁ~?
B美
ちなみに、関数の外側だろうが、関数の内側だろうが普通に使えるからね
(引数として渡す必要は無いってこと)
A子
B美
別に規則として決まっているわけじゃないけど、慣習的にそうする人が多いって感じかな
(定数名であることが分かりやすいようにね)
A子
C菜
略して「アンスコ」です~
B美
テニスウェアの「アンダースコート」を思い浮かべちゃうし…
A子
B美
あ、でも「アンダーバー」や「アンダーライン」って言い方も、別に間違いってわけじゃないわよ
(正式名称は「アンダースコア」だけどね)
んで、そもそもの質問に対する回答だけど…
複数の英単語を「アンダースコア」で接続するってのは、よくやるのよね
(「file_get_contents」関数でも使ってたでしょ?)
A子
B美
だってハイフンって、引き算で使う演算子だもの
ちなみに、複数の単語を「アンダースコア」でつなぐ記法を「スネークケース」と呼んでるわ
(見た目が蛇みたいでしょ?)
C菜
B美
「スネークケース」以外には「キャメルケース」と「パスカルケース」があるわね
A子
ん?「パスカル」ってフランスの哲学者?
B美
まぁ、その「Pascal」って名称は、哲学者「ブレーズ・パスカル」を語源とするんだけど…
C菜
B美
・Snake Case → $tax_rate
・Camel Case → $taxRate
・Pascal Case → $TaxRate
ってこと…
どう?
もう分かったんじゃない?
A子
・二つ目以降の単語の頭文字を大文字にするのが「キャメルケース」
・全ての単語の頭文字を大文字にするのが「パスカルケース」
…ってことじゃないかしら?
C菜
「キャメルケース」のRの部分が、らくだのこぶみたいです~
B美
ちなみに「Pascal」というプログラム言語では、変数名や関数名を「パスカルケース」のように記述するって慣習があったのよ
(そこからの名付けってわけ)
A子
だったら、defineする定数名って「スネークケース」でしか書けないよね?
B美
まぁ、「全て大文字で記述する」というのは文法規則ってわけじゃないから(ただの「慣習」だから)、「パスカルケース」で定数名を付けても良いんだけどね
C菜
最初の引数が「定数名」で、次の引数が「値」ということじゃないでしょうか~?
B美
そう、実はdefineって関数なのよね
あ、あとね
defineで別名を付けられるのは、単なる値(数値や文字列)だけじゃなくて、配列や連想配列もだからね
<?php
define("ARRAY_SAMPLE", [1, 2, 3, 4, 5]); define("HASH_SAMPLE", ['first' => 'A子', 'second' => 'B美', 'third' => 'C菜']); echo ARRAY_SAMPLE[2]."<br />".HASH_SAMPLE['third']; ?> |
C菜
使い方は普通の配列や連想配列と同じなんですねぇ~
B美
だって、都道府県名って変更されることがほぼ無いからねぇ(絶対無いとは言えないけど)
A子
色々と応用が効きそうな感じ…(面白いじゃん)