※ 本記事にはプロモーションが含まれています。
こんにちは! ねこです。
みなさん、プログラミングするときに、英文法って意識されていますか?
今回は、英文法を意識しないと結構はずかしいプログラムを書いちゃうよ、というテーマで書いていこうと思います。
かくいう私の英語スキルは、高くはないです。
ですので、昔は平気で変なコードを書いていました。
今では、このことを意識することで、だいぶん変な記述をすることが減りました。
今でもスペルミスは結構しますが 笑。
ちなみに、ここで書く内容は、はプログラミング初心者だけの間違いではありません。
私の見たなかでは、結構ベテランの方でも間違えていたります。
というのは、プログラムの教材や参考書に、このことをちゃんと書いてくれているものってあまりないんですよね。
でも、恥ずかしくないプログラムを書く上では、本当に大事なことです。
これを意識するだけで、他の人にも読みやすいプログラムになります。
是非、参考に学習してみてください。
[sitecard subtitle=関連記事 url=/unity-mvp-with-xflag-tech-note/ target=]
そのプログラム、意味通ってますか?
プログラム自体は、仕組みにのっとって書けば、実行時にマシンからエラーを表示することはありません。
ちゃんと動くプログラムを、あまり人から文句を言われることはないはずです。
でも、あなたと違う人が、そのコードを修正することになったとき、とんでもない問題が表面化する場合があります。
突然ですが、問題です
次のコードを見てください。
このコードの記述に、どこかおかしい箇所はありますでしょうか?
今回は、C# を使って書いています。
内容としては、man という Human クラスを作って、テニスをさせるというものです。
public class Human
{
private bool tennisFlag = false;
public void SportsPlay(string sportsName)
{
if (sportsName == "Tennis")
{
tennisFlag = true;
}
}
public string Word()
{
if (tennisFlag)
{
return "テニスは楽しいな";
}
else
{
return "テニスしたいな";
}
}
}
public class Main
{
public Main()
{
var man = new Human();
man.SportsPlay("Tennis");
Trace.WriteLine(man.Word(), "Man");
var woman = new Human();
woman.SportsPlay("Golf");
Trace.WriteLine(woman.Word(), "Woman");
}
}
// 出力
// Man: テニスは楽しいな
// Woman: テニスしたいな
答えがでましたでしょうか?
・・・
・・
・
では、これから、おかしい箇所を書いていこうと思います。
基本は、S + V + O のカタチ
まず、この内容ですが、
man.SportsPlay("Tennis");
こちら、英語が分かる人が素直に読んだら、おかしい文章ということがわかります(翻訳は Google 翻訳です)。
男のスポーツプレイ(このスポーツ名はテニスです)
いいですね、男のスポーツプレイ 笑。何かが目覚めてしまいそうです。
これは、本来の意味としては、こう書きたかったはずです。
男はスポーツをします(このスポーツ名はテニスです)
と、なると、プログラム上では、こう書けば、すらっと読めるようになります。
man.PlaySports("Tennis");
基本は、メソッドでは、インスタンスに何かさせることがメインになります。
ですので、メソッド名を考える時、
- S(主語)… インスタンス名
- V(動詞)… メソッド名の前半
- O(目的語)… メソッド名の後半 or 引数
を意識して書けば、よっぽどオカシイ名前にならないはずです。
変数名は名詞、メソッド名は動詞で
プログラミング初心者だと、これは、変数名かメソッド名か混乱するケースがあると思います。
その時は、変数名は名詞、メソッド名は動詞。と覚えてさえおけば大丈夫です。
逆をいいますと、全てのプログラマは、当然そのように読み書きを行います。
ですので、突然このような文法構造がでてきてしまうと、読む時に混乱してしまうのです。
もちろん、読み手としても、Play と Sports で、スポーツをさせたいんだな、と、予想はできます。
しかし、あとで大きな問題になるのは、Word() のほうです。
基本的には、変数(int, float, string など)は、名詞で記述します。
しかし、bool(真偽値)だけは、is○○ と書くことを勧めます。
今回は、テニスをしているかを、下記のように書きました。
private bool tennisFlag = false;
英語にするとこんな感じです。
このテニスフラグ(これは「偽」です)
これでいいかと思うかもしれません。
しかし、is○○ のような書き方をすると、こうなります。
private bool isPlayingTennis = false;
これはテニスをしている(これは「偽」です)
そうすると、実際の具体的な内容まで記述ができるようになります。
また、tennisFlag と書いてしまう場合。
内容を知らない人が見ると、テニスのなにが true か false かわかりません。
しかし、isPlayingTennis だと、true がテニスをしているほうだと、はっきりと明記できます。
覚えておきましょう。
名前と動作が違うのはダメ、絶対
先ほど、SportsPlay() より、Word() のほうが問題だと書きました。
それはなぜか、説明していきたいと思います。
man.Word();
これを英語に直しますと、このようになります。
男の言葉
いやぁ、いいですねぇ、そそりたつダンディズムの香りが 笑。
Word が名詞なのは、先ほどの説明の通り、直すべき箇所ではあります。
しかし、こちら、さらに大きな問題点があります。
それは、この文章を読んでも、中身が全く予想できないことです。
これを書いた本人であれば、この言葉が、スポーツの感想であることは知っています。
しかし、初めてこのブログラムを読む場合。
この言葉が、誰の、何の言葉なのかが、全く予想がつきません。
なんせ、「男の言葉」としか書いてないですから。
と、なると、読み手は、メソッドの中身まで見る必要が出てきてしまい、理解するのに時間がかかってしまいます。
さらに、その中身までそんな様子だと、最悪、誰も触れないアンタッチャブルなコードになってしまうのです。
この場合、例えばこのように書き直せます。
man.GetImpressionSports();
男はスポーツの印象を得る。
丁寧に書きすぎでは? と、お思いの方もいるかと思います。
しかし、書かないより、丁寧に書くにこしたことはありません。
修正例はこちら
上記の内容を踏まえて、修正した内容がこちらになります。
public class Human
{
private bool isPlayingTennis = false;
public void PlaySports(string sportsName)
{
if (sportsName == "Tennis")
{
isPlayingTennis = true;
}
}
public string GetImpressionSports()
{
if (isPlayingTennis)
{
return "テニスは楽しいな";
}
else
{
return "テニスしたいな";
}
}
}
public class Main
{
public Main()
{
var man = new Human();
man.PlaySports("Tennis");
Trace.WriteLine(man.GetImpressionSports(), "Man");
var woman = new Human();
woman.PlaySports("Golf");
Trace.WriteLine(woman.GetImpressionSports(), "Woman");
}
}
// 出力
// Man: テニスは楽しいな
// Woman: テニスしたいな
これで、初めて読む人でも、Main() の部分だけを読むだけで、何を行っているのかが分かるようになります。
目標は、読んだら動作が分かるように
プログラムを書く時にも、人付き合いについても、気をつけておきたいこと。
やはり「他の人が見たら、どう思うか」だと思います。
なぜ、綺麗なコードを書く必要があるのか?
それは、仕事を一緒にするメンバーに対しての、礼儀であり、マナーだからですよね。
みなさんも、是非気をつけて、楽しいプログラミングライフをお過ごしください。
[sitecard subtitle=関連記事 url=/how-to-learn-the-program/ target=]