こんにちはhimakuro(@himanakuroneko)です
副業が徐々に解禁されつつあり、今まで以上にプログラミングを学ぶ人が増えてきました。
コードを書ける人が増えてくるのはとても嬉しいことですが、質の高いコードを書けている人は少ないのが現状です。
我流で学び何かを作ろうとするその姿勢は素晴らしいですが
意識しないと自分だけしか理解出来ないコードになり、処理も煩雑にもなってしまいがちです。
そこで今回の記事ではコードを書く時に意識すべき3つの事をまとめてみました。
プログラミング初心者向けの入門記事となりますが、ベテランの方でも少し油断すると抜けてしまう内容でもあるので、今一度自分が書いたコードを見直してみてください。
適切な名前をつけよう
コードを書くにあたって変数名や関数名はとても重要です。
しかし、プログラミング初心者はとにかく作りたいものを完成させる事に意識が行ってしまい、適切な命名を行えていない事が殆どです。
変数名のダメな例
- 日本語をローマ字にする。例:takasa
- 意味のない文字列。例:abc
- 一文字の変数。例:t
日本語をそのままローマ字にした変数名は論外です。
1文字の変数名はライブラリなどで使用することはたまにありますが、基本は意味のある命名をすることを普段から習慣づけると良いです。
関数名のダメな例
- 日本語をローマ字にする。例:menseki
- 無駄に長い名前。例:ProductOfHeightAndWidth
関数名を付けるのにはセンスが要求される場合もありますが、基本は英語でシンプルな名前をつけるのがベストです。
例えば、面積を計算する関数名に「ProductOfHeightAndWidth」(高さと幅の積)みたいな名前を付けるのは無駄です。
シンプルに「Area」(面積)と名付けましょう
適切な名前を変数や関数に付けることで役割を明確にする事ができ、不要な勘違いなども減りバグが起きにくくなるというメリットがあります。
そして更に、適切な変数名が付けられているコードはそれだけで出来るプログラマーが書いたコードにも見えます。
作り始めたものを完成させるのは大事なことですが、変数名や関数名も日頃から意識してコードを書く習慣を付けましょう。
共通化を意識しすぎない
少しプログラミングが書けるようになると、なんでもかんでも共通化したがる人がいます。
確かに共通化すると同じことをしているのにコード量が減って、一人前のエンジニアになった気分になれますが、闇雲に共通化をすると後で痛い目にあいます。
例えば、下記のようなコードがあったとします。
class Man
{
public function name($name)
{
echo 'name is: ' . $name. PHP_EOL;
}
}
class Woman
{
public function name($name)
{
echo 'name is: ' . $name. PHP_EOL;
}
}
ManクラスもWomanクラスも名前をプリントするNameというメソッドを持っています。
どちらのNameメソッドも内容が同じなので継承を使い、下記のように共通化してみます
class Person
{
public function name($name)
{
echo 'name is: ' . $name. PHP_EOL;
}
}
class Man extends Person
{
}
class Woman extends Person
{
}
内容が同じなのでここまでは良いですよね。
しかし仕様が変わり、名前を表示する際に「Mr.」、または「Mrs.」を付けてほしいと言われたとします。
ここで、メソッドを共通化するのに意識が行き過ぎている駆け出しエンジニアの人は、下記のようにコードを修正してしまうことがあります。
class Person
{
public function name($name)
{
if($obj instanceof Man)
{
echo 'name is: Mr. ' . $name. PHP_EOL;
}
else
{
echo 'name is: Mrs. ' . $name. PHP_EOL;
}
}
}
class Man extends Person
{
}
class Woman extends Person
{
}
メソッドは1つにまとまったままですが、共通化する前であれば不要だったはずのif文を追加する必要が出てきてしまいました。
条件が少なければまだ可読性は損なわれませんが、この様にどんどんと仕様が変わって条件が増えていくとカオスな状態へと変貌していきます。
そうならないためにも、無駄な分岐などが必要になった場合は潔くメソッドを分けて書くようにしましょう。
class Person
{
}
class Man extends Person
{
public function name($name)
{
echo 'name is: Mr. ' . $name. PHP_EOL;
}
}
class Woman extends Person
{
public function name($name)
{
echo 'name is: Mrs. ' . $name. PHP_EOL;
}
}
共通化を行う事は決して悪いことではないよ!でもしっかりと今後どの様な変更を行う必要があるかを考えた上で行うことが大切!
コメントを書くことが必ずしも正しいとは限らない
未来の自分のため、他人のためにコメントをひたすら書け。
コードの記述量よりもコメントを多くかけ
みたいな内容を目にしたことはありませんか?
誰が見てもわかるようなコードを書くことは大切ですが、それはコメントの量を増やすとはイコールではありません。
例えば下記のコードはどうでしょうか。
// 面積を計算する関数
function area($height, $width) {
// 面積 = 高さ x 幅
$area = $height * $width;
// 計算した面積を返す
return $area;
}
パット見は丁寧にコメントが書かれているPHPのコードですが
これらのコメントはすべて無駄です
なぜなら関数名や変数名を日本語にしただけで情報量としては全く変わらないからです。
ここで覚えておいて欲しいのは
コメントを1行読むコストもコードを1行読むコストもコストとしては変わりません。
無駄なコメントはコードを読む妨げになり時間の無駄にもなります。
複雑な計算をしている処理や、一見どんな処理をしているかわからないようなコードの場合はコメントで補足するのは良いですが、変数名と同等の情報量しか無いコメントは書かないようにしましょう。
まとめ
コードが書けるようになってくるとつい楽しくなってしまい、初歩的な部分が疎かになってしまいがちです。
そうならないためにも日頃から意識して質の高いコードを生産できるように心がけましょう。
今回書いた内容は「リーダブルコード」という本に載っている内容をhimakuroなりに解釈して書いた内容だったりします。
「リーダブルコード」はエンジニアを目指すのであれば必ず一度は読んだほうが良い本なので、もしまだ読んだことがない方は是非読んでおきましょう。