ソースコードの変数名規則

いつも迷う変数名

プログラマーはいつも見やすいソースコードを書くことを心がけています。

ですが、いつも迷うのが変数名の命名規則

もちろん、会社や部署、チーム、あるいは開発言語によって命名規則が決められていることが多いです。が、それでも迷う。

技術的にはいくつか種類があるので紹介します。

単語の区切り方で種類がある

  • キャメルケース 例)firstTime 単語の頭を大文字にする

  • パスカルケース 例) FirstTime キャメルケースのうち、戦闘の単語も大文字にする

  • スネークケース 例)first_time 単語の間をアンダースコアで結ぶ

変数の命名の色々

  • 先頭に変数型を示す文字を入れる 例)iCount, strMyName(整数型にはIを。文字列型はstrを付与しているのが特徴)

  • 先頭にスコープ(関数内の変数、グローバル変数、等) 例)g_iNewCount(gをグローバル変数であることを示していて、iは整数型)

他にもたくさんありますね。

私の場合は・・・

私がC++言語プログラムを書くときの変数名の付与は、(部署やプロジェクトで決められていなければ) キャメルケースで、かつ、ローカル変数の場合は「m_」を付与します。

例) int m_textCount;

「m_」はクラスのメンバ変数で、memberのmを意味しています。 これ、昔のオブジェクト志向言語ではよく使われていた記法です。古い人間なので未だにこれを守っています。

実はキャメルケースって見辛いことがあります

関数の行数が大きいようなソースコードではキャメルケースは読みづらくなることがありますね。

例えば、キャメルケースとスネークケースを比較してみましょう。スネークケースのほうが見やすくないですか? 文字が密集しているとキャメルケースやパスカルケースは読みづらいと感じることがあります。

int X1LinesOfNewArea, Y1LinesOfNewArea, Z1LinesOfNewArea; int X2LinesOfNewArea, Y2LinesOfNewArea, Z2LinesOfNewArea; int X3LinesOfNewArea, Y3LinesOfNewArea, Z3LinesOfNewArea;

int x1_lines_of_new_area, y1_lines_of_new_area, z1_lines_of_new_area; int x1_lines_of_new_area, y2_lines_of_new_area, z2_lines_of_new_area; int x1_lines_of_new_area, y3_lines_of_new_area, z3_lines_of_new_area;

結局は?

結局、どれがいいかは決まっていません。世の中のプログラムでもあまり断言はされていないと思います。 ただし、

Microsoftが推奨している形式やGNUソフトウェアでよくかかれる形式があるので、 開発環境に即して合わせてみると、コードを読んだお客様や友人に「あ、こいつ、ちゃんとMicrosoft(あるいはLinux)の規則を守って書いているな!」と思ってもらえるはずです。 汚いと思ったコードをよく見ると変数名の命名規則がメッチャクチャなことが多いのです。

プロのプログラマとアマチュアの違い

私の感想

十年とシステムエンジニアプログラマを仕事としてやってきた立場から述べたいと思います。 私の感想であり、普遍的なものではありません。

そもそも数日でプログラムを作る人がいるよね

ネットサーフィン(死語?)をしていると「このプログラムは3日で作りました!」とかいう人いますよね。反対に、3ヶ月、6ヶ月スパンでソフトウェアをつくる企業もいます。この違いは能力でしょうか? 例えば、マイクロソフトは数年もかけてWindowsのバージョンアップ版を発表しますが、あれはマイクロソフトの技術者が遅いせいでしょうか?

それは違うと断言します。

開発に時間がかかるのはなぜか

私が思うに以下のような理由です。

  • 異常系(エラー処理)を厳密に実装するため アマチュアは「正常」と「エラー」の2つの分岐処理を書いて満足しますが、プロは違います。運用でエラーが起きたときに解析ができるように「正常」「エラー1発生時」「エラー2発生時」「例外1発生時」「例外2発生時」・・・のようにエラー処理を多数分岐させて書きます。「仮にこの処理の途中でHDDが故障したら・・・」みたいなこともシステムによっては検討し、実装することもあります。

  • バグを潰すために各工程で検証期間を設けているため  プログラマはバグを潰すために、複数人で設計書やプログラムコードをレビューします。また、試験項目もレビューします。これが各工程で数日要します。

  • あとの人がメンテナンスをしやすいようにコーディングしようとするため  どの処理を関数にしたらわかりやすいか、コメントを入れるべきか、無駄がないか、などを考えてコーディングします。  全ては「運用で問題になったときに解析時間を減らすため、直しやすくするため、バグになりにくくするため、誰でもメンテナンスができるようにしたいため」です。お客様のためでもありますが、自分のためでもあるんです。  アマチュアももちろん考えながら実装していると思いますが、プロは考えるだけで1行も書かない日もありますよ。

結局何を言いたいか

天才プログラマーが世の中にいますよね。見てるとすごい速さでプログラムを作り上げます。 それはそれですごいと思います。しかし、企業では天才プログラマをたくさん雇うことはできません。 チームとしてシステムを開発しなければならないし、開発したシステムは5年10年と保守していかなければなりません。一人だけ天才がいても立ち行かないのです。

これからプロを目指す人、今、仕事に従事している人はあとからメンテナンスしやすいことを考えたコードが書けるよう心がけてください。自ずと周りから重宝されるプログラマ・SEになれると私は思います。

トラックボールマウスデビュー

マウス歴

20年近くマウスを使っていました。最近はAppleのマジックマウス2を使っていました。

トラックボールに浮気してみた

マウスはポインタを動かすために机の上を滑らせます。そのため結構広めにスペースが必要です。

トラックボールはこのスペースが不要です。トラックボールマウスが置けるだけのスペースがあればよく、一度設置したら 滑らせる必要がありません。

私が選んだトラックボールマウスは!

Logicoolですね。有名どころです。 これはいいですね。慣れが必要ですが、ボールのすぺりがよく腕が疲れません。

f:id:unyonyopochi-snake:20210413212316j:plain

*2021/4/25追記 ** 10日ほど使ってみて感想を言わせてもらいます。

-でかい。  成人男性平均よりも小さい私の手ではちょっと大きいですね。  ボタンが押しにくい。手のひらの大きさが平均以上なら大丈夫かな?

  • 本体の移動がないので狭い空間でも使える。

  • 慣れると違和感なくボールが動かせる

愛用の万年筆

愛用というほど使い込んではいないのですが、気に入った筆記具を1本は持っていたいですね。 私が使っている万年筆はいくつかあるのですがその中の一つを紹介します。

それは「クラシックM200デモンストレーター」です。 特別生産品なので今同じものが購入できるかわかりません。

f:id:unyonyopochi-snake:20210326233348j:plain
デモンストレーター

デザイン

ペリカンといえば有名すぎるドイツの老舗。とてもスタイリッシュです。

使い勝手

書いていてかすれもなく書きやすいです。しかし、漢字を書くのは苦手かもしれないですね。 漢字は線の始まりと終わりは止め、ハネなどの尖ったシャープな線を引かないと格好がよくないのですが、シャープな線は書きにくいと感じました。逆に英語とかひらがなは書きやすいですね。

いずれにしてもお気に入りです。

RICOH GR

カメラについて

私が普段使っているカメラを紹介します。

GRとは

RICOHから発売しているカメラで、特徴としては以下の通り。

  • 高級デジタルコンデジ
  • 撮影素子のサイズはAPS-Cと普及タイプの一眼レフ並みのサイズ
  • 単焦点(ズーム機能は非搭載)
  • 電源ONから撮影可能になるまでの時間が短い
  • 自分の設定をモードダイヤルで一発切り替え可能

f:id:unyonyopochi-snake:20210322181720j:plain:w360
私の常用カメラ

気に入っているところ

気に入っているのはその機動力です。 とにかく電源ONからすぐに撮影できるし、マクロ機能があるので小物の撮影も可能。 スマホと違ってセンサーサイズ(撮影素子のサイズ)が大きくて暗くてもきれいに撮影できる。

デメリットは、ズームがないこと。 とはいっても、ズームがないなら撮影者が動けば良いこと。 ちなみに撮影を勉強するならばズームせずに自分で距離を取るほうが勉強になるらしい。 普段からズームを使っていると被写体との距離感のとり方が学べず良くない、とかなんとか。

それ以外は本当に良いカメラです。

配送できない?理由がわからない

いつも某オークションでヤ○トを使っています。 しかし、今日、コンビニで匿名配送をしようとしたら、配送できない地域とか言われました。 理由をコールセンターに問い合わせたら、「わからない」と言われてたらい回しにされました。

匿名配送の場合、地域を説明することもできず。

県名を伝えてもその地域の配送停止は出ていない、とのこと。

じゃあ、 ・コンビニのシステムが壊れた ・某オークションで発行した情報に誤り ・とても配送できない地域だった(例えば山の頂上とか被災地域とか) ・コールセンターが無能

のどれかですよね。今まで信頼してきた配送業者でしたが残念です。 コンビニの店員さんには色々調べてもらいました。コンビニには非はないでしょうね。

明日は大きな営業所に行って説明してきます。

プログラマ初心者が学習してほしい言語

私の仕事

私はソフトウェア開発に携わってもう20年になります。今まで習得した言語は以下の通り。 仕事をしていると開発するシステムによって得意な言語が変わってくるので、次々と覚えることになりました。

プログラム言語というと違和感があるスクリプト言語も挙げますね。

「初心者です。何言語を勉強したらいい?」

私のオススメはC言語です。 「Javaとかのほうが良くないか」、「古くない?」という意見もあるかと思いますが、私なりの根拠があります。

  • ”関数”とはなにかがわかる基本言語

どの開発言語も大半は「関数」というものがあります。必ずです。仮にJavascriptだろうがpythonだろうがperlだろうが必ずあります。

何故あるか。それは言語を学んでいくとわかると思いますが、複雑な機能は関数で分割するほうが作りやすいのです。

C言語を学ぶと、C++は似通った文法なので学びやすいのです。Javaも同様です。

  • C言語を知っている人は多いので質問ができる

*シンプル

非常にシンプルです。ここでいうシンプルというのは、例えば自動車免許を取る際、マニュアル車で練習するとクラッチの動きがわかりますが、AT車だとクラッチの意味がわからなかったりしますよね。C言語マニュアル車Java言語はAT車って感じです。C言語は書いたコードがどのように動くのかわかりやすいのです。

書籍

私がC言語を学ぶ際に読んでいた本を紹介します。

ソフトウェア業界では有名な本です。 なにせC言語を開発した人が執筆した本であり、この本を知らないC言語プログラマはいないのではないか、と言われるほどです!?

とはいえ、わかりやすい本かというと微妙。教科書と思っていただければと思います。

もっといろいろな本を読んだかと思って思い返しているのですが・・・実はC言語は上記の1冊以外は読んだ記憶がないですね。しかも一冊を最初から最後まで通して読んだことはないです。必要な章だけかいつまんで読んでいました。