魔法少女☆しゅがぁ♡しんたっくす(⋈◍>◡<◍)

0x14歳の女子中学生です( ˙꒳˙ ) TikTokとインスタにハマってます(⋈◍>◡<◍)。✧♡

変数名や関数名には正しい名前をつけましょう

こんにちは。不穏です( ˙꒳˙ ) 

この挨拶もいずれ第一正規系に置き換えたくなる日が訪れそうです( ˙꒳˙ ) 

 

ツイッターやってたら、変数名とかの話題になったので、

なんかちょうどよさそうだし、変数名やクラス名とか語ります( ˙꒳˙ ) 

 

https://twitter.com/huon_chan/status/1282261447108554752

 

変数や関数、クラスに名前を付けるというのは、親が子供に「名前」を付けるの同じで、

正しい名前を付ければ、そいつはあなたのプログラミングを助けますが、

ふざけたり不適切な名前を付けられた変数や関数は、その復讐の時を、虎視眈々と待ち続けています( ˙꒳˙ ) 

しかも不都合な事に、その報復を受けるのは、「実装した奴」じゃないことが大半です( ˙꒳˙ ) < 担当者出てこいゴラァ!!!便所の果てまで仕様聴く為に追い掛け回すぞ!!

 

 

 

先に「変数名が適切じゃないと、何が問題なの?」って事に関しては、

かなり極端なバッドケースを掲載します( ˙꒳˙ ) 

 

● 解読不能

http://unkode-mania.net/view/5016619653eb124626000000

f:id:huon_chan:20200713193007p:plain

● 日本語混在

http://unkode-mania.net/view/5029e1a9eef2c7f861000008

コメント欄は意外と擁護意見あるが、

俺が全角/半角キーの押し過ぎで腱鞘炎になったら

この方針で進めた奴に慰謝料請求する。

( ˙꒳˙ ) そんなに日本語が好きなら「なでしこ」でも使ってろ

 

● 極端に長いor極端に短い

http://unkode-mania.net/view/5017c16b88f62a4864000000

JavaDocでやれ(正論)

 

●番外編:プログラマなら「常識」じゃなく「標準」に従え

http://unkode-mania.net/view/50a1018a61fd523468000000

f:id:huon_chan:20200713193204j:plain

 

■ 変数の命名の種類

 

●キャメル記法

int TwitterKusoRipuNum = 37564;

みたいに、単語の区切り事に大文字を使う記法の事で、

だいたいの言語は、この記法が使われる事が多い。

 

名前の語源は、見た目がラクダのコブのように見える事から( ˙꒳˙ ) 

 

ちなみに、上記記法を「アッパーキャメル」

先頭だけ小文字にする「twitterKusoRipuNum」みたいな命名

「ローワーキャメル」と呼ばれてます。

 

●スネーク記法

i_licke_python ='Hollow World!!'

のように、単語の区切りを「アンダーバー」で区切る記法の事。

名前の語源は、見た目通り、「蛇」のようにアンダーバーで長くつながる事から。

変数名が長くなるので、キャメル記法のほうがよさそうですが、あまり気づかれない長所として

「変数名を英語の文法のように自然に記載できる」というメリットがあります( ˙꒳˙ ) 

英語の文書のスペースが、アンダーバーに置き換わった感じです。

余談ですが、ふおんはこっちの書き方のほうが好きです( ˙꒳˙ ) 

 

ハンガリアン記法

string strName ="不穏";

int iAge = 14 ;

 

みたいに、変数の先頭に、小文字で変数の型を記述する記法

昔は流行ってましたが、以下の理由で廃れました。

 

・最新の、よほど貧弱なIDEじゃない限り、IDEが補完して変数にマウスオーバーすれば型を表示してくれる

・int型の変数をlong型に変更した際に、ルールに従うのなら、使用箇所全てを書き換える必要がある

 

変数の型を先頭に書く人はもう流石に絶滅危惧種ですが、

クラスのメンバ変数の先頭にmNameみたいに「メンバ変数」である事を示す記号を付ける記法は、今だ生きていたりします。

 

また、JavaScriptPythonみたいな、動的型付け言語では、この記法をあえて採用することで

その変数に「どんなデータが入ってるのがふさわしいのか」という情報を変数そのものに持たせる事が可能なので、時々使う事はあります( ˙꒳˙ ) 静的型付け言語では採用メリットないですね

 

■自分がよく使う寧名規則

・言葉にできない奴

obj

・配列の要素の場所を表す数値

index,idx,i

・一時的なデータ置き場

tmp

・何等かのデータを取得する

Get

・なんらかのデータを与える

Set

・クラス等を使うための初期設定を行う

Initialize、Init

・処理1行程度の純粋な比較をbool型で取得する

Is

・与えられたデータの妥当性を調べる

Check

・条件に当てはまるデータを取得する

Find

・内部データを特定のルールに基づき整理する

Sort

・定期的に呼ばれる関数、または特定タイミングで呼ばれる

Update

・失敗する可能性がある程度想定されてる関数

Try

・状態が有効かどうか

Enable

・可視状態に関係するもの

Visible

・あるオブジェクトに渡して、特定タイミングで実行してもらう関数

Subscribe

・他のモジュールに何らかのタイミングを通知する

Notify

・何等かのまとまった処理を実行する

Execute

・データのうちの一部を消去する

Delete

・内部データを纏めて消去する

Clear

・ある処理のクラスそのものを不可逆的に削除する

Destroy

・予期せぬタイミング等で、特定処理を一時的に中断する

Abort

・予期せぬタイミング等で、特定処理を不可逆的に削除する

Kill

・ログを出力する

Logging

・ある処理やライブラリを、より使いやすくするために手続きを簡略化したもの

Helper

・関数名すら考えたくないほど思考放棄

Hoge

 

プログラム所学者向け、おすすめ言語

●日本語

重要度:高

お勧め度:高

難易度:低

 

( ˙꒳˙ ) 冗談です

 

●英語

重要度:高

お勧め度:高

難易度:高い

 

( ˙꒳˙ ) 冗談といいたいけど、大事です。だいたいのプログラムの答えは海外サイトに転がってたりします。

ただ、GoogleChormeみたいなブラウザにはデフォルトで「日本語に翻訳」という

魔剣が備わってるので、それを駆使すれば、中学時代の英語の5段階評価2みたいな人間でも立ち回れます。

 

( ˙꒳˙ ) 真面目にプログラミング言語について軽く述べていきます

 

●C

重要度:低

お勧め度:低

難易度:中

 

( ˙꒳˙ ) 専門学校やプログラムを学校で習うときの定番の言語ですが、

最近は、普通にプログラムを学ぶだけなら、もっといい言語があるので、優先度は低いです。

マイコンとか、リソースが限られた環境で力を発揮しますが、Rustにお役を奪われそうな気配はしてます。

 

C++

重要度:中

お勧め度:低

難易度:高

 

Rustがだいぶ速度面で追い上げてますが、それでもオブジェクト指向言語の中で

トップクラスの速度を誇る言語です。地味に改修案件で、改修前のプログラムが

この言語で作られてる事があるので、覚えておいて損は無いですが、学習コストは高い。

速度は圧倒的ですが、メモリ管理など、最近のモダンな言語にはない原始的な概念を理解しないと

すぐにメモリリークを起こすので、初心者にこれを進めるのは

免許取り立ての初心者に「スーパーカー」をお勧めするものだと思い、お勧め度は低くしました。

 

C#

重要度:高

お勧め度:高

難易度:中

 

主にWindows系のGUIアプリケーション(WPF)を使うのに使う言語。

他には、ゲームエンジンでもあるUnity等でもスクリプトの実装部分として利用者が選べる選択肢に入ってる。

Javaの後追いのような感じで作られているため、利用感はJavaに近い。

Javaと違って、優秀なIDEあるVisualStudioをインストールすれば、そのまま使えるため、環境設定も比較的煩わしい場面は無いだろう。

たんにプログラムを学びたいだけなら、手軽さの意味で選択肢になる。

静的型付け言語の入門としては申し分は無い。

 

Java

重要度:中

お勧め度:中

難易度:中

 

VM」という仮想マシンの上で動くので、そのVMさえ入っていれば

どんな環境でも動く事が売りの言語。

とはいっても、その特性より、ライブラリやフレームワークの多さ、

言語としての癖のなさから愛されてる傾向が多い。

 

環境設定の若干の億劫さと、Javaを管理してるOracle社が時々

ドラスティックな決断をしてエンジニアをおびえさせてくる点と、

言語時代は安定してるが、よく使われるIDEである「エクリプスの動作の重さ」が

この言語の信頼性や開発効率の足を著しく引っ張っている感が否めない。

 

ちなみに、Javaを世に広めたのは、Sunなんとか会社と言う名前のところだが、

そのSunなんとかが落ち目になった時に、JavaIDEとして名前を広げたツールの名前は

Eclipse(日食)」というのは、中々このツールを考えた人は皮肉が好きなのだろう。

 

PHP

重要度:中

お勧め度:中

難易度:中本のラーメンのスープを鼻の穴から飲むレベルに近い

 

Webアプリにおいて、データベースと唯一やり取りができる言語のひとつに入る。

サーバー上で動作し、データベースとクライアント間のデータの橋渡しをする。

 

言語的には、たんなる動的型付けのオブジェクト指向言語だが、

他の言語と比べて違うのは「圧倒的な環境設定の難易度の高さ」

HelloWorld一つだすのに、ローカルサーバーの起動から、

アクセス関係のコンフィグ、その他もろもろの設定ファイルをいじる必要があり、

文字通り「初見殺し」の塊。

 

また、動的型付け言語(途中から明示的に形宣言ができるようになった気はする)な上に

ソースコードの規模が膨れやすい事から、予期せぬ動作を起こしまくる、

災害レベルのスパゲティコードになる可能性が高い。

 

Python

重要度:高

お勧め度:高

難易度:低

 

豊富なライブラリ、特に計算系や機械学習に対し、そのライブラリの力で

少ない記述で処理を実現できる言語。

 

インデントが空白スペース1文字ずれるだけでエラーを出すなど、

記述に厳格なので、行儀の悪いコードが書きづらい、補正下着みたいな言語。

 

正確にはスクリプト言語だが、クラスも問題なく宣言でき、ほぼほぼ本格的なプログラミング言語

インストールしたあと、パスを通す必要があるが、難易度はJava等に比べて高くない。

 

唯一の弱点は、スクリプト言語故の実行速度と、所学者が選ぶ言語としてよう選ばれるだめ

就職のときはライバルが多い状態で就職活動をしないといけない恐れがある事か。

 

JavaScript(+HTML&CSS

重要度:高

お勧め度:高

難易度:(最初は)低

 

Web界隈で有名だが、JavaScript自体を単体としてバッチと組み込んで使う運用もある。

 

特に環境設定必要なく、JavaScriptとHTMLだけでHelloWorldを表示するだけなら楽勝。

ただ、JavaScriptの言語性質上、大規模な処理を書くには向いてなく、

容易にスパゲティ化するので、プロダクトとして運用する場合、

JavaScriptをそのまま使い続ける運用はお勧めできず、

CoffeeScript、最近はTypeScript等の、最終的にJavaScriptのコードとして吐き出す

中間言語(または糖衣構文(シンタックスシュガー))で間接的に記述することが多い。

 

React.js等に手を出し始めると、JavaScript及びHTMLやCSSの知識以外にも

他ツールやライブラリの知識も必要になるので難易度はあがるが、

Quitaとかの記事あされば出来ないほどでもない。

 

一番華やかな環境であると同時に、技術の新陳代謝が激しく、

覚えた言語がわずか数年で廃れる覚悟も必要になる

 

Haxe

重要度:低

お勧め度:中

難易度:中

 

プログラミング言語というよりは「クロスコンパイラ」であり、

Haxeの記法(ActionScriptと言った方がいいか)で記述して、

特殊な定義ファイルを共にコンパイラに渡すと、まったく同じ動作をする

他言語のソースファイルを吐き出すのが最大の特徴。

 

言語レベルで実装が分かれてしまったプロジェクトの共通処理を書くのに向いている。

専用のコマンドでライブラリをインストールするなど、性質はPythonに近い。

 

Objective-C

重要度:無

お勧め度:無

難易度:高

 

控えめに言ってゴミです。

冗談抜きでコレを勉強するよりCOBOL勉強したほうがまだ未来があります。

とはいうのもアレなので、長所だけ言います。

「C」から派生してるので、オブジェクト指向言語としては速度面は早いです。

ただ、何度でもいう。ジョブズによってゾンビのように生き永らえ

ジョブズと共に死んだ言語。さらば。フォーエバー。