コーディングの世界で我慢ならないこと【プログラミングあるある】

この記事を私の愛するPHP言語へと捧げる。

制御文の空白を省略

制御文と式の間のスペースが省略されている。

if(true) print("hello");
while(true) whale(true);

関数呼び出し式(print(value))との区別がつきにくくなるので我慢ならない。

制御文と関数呼び出しは異なる機能や概念なので、両者を区別するためにも制御文に対しては空白を挿入すべきだと思うので我慢ならない。

タブと空白が混在したインデント

おもに古い時代から引き継がれているコードやJavaの標準ライブラリ。インデントが崩れるので我慢ならない。

public void srczip(String string) {
    if (string != null) {
	char[] chars = str.toCharArray();
	for (char ch : chars) {
	    System.out.println(ch);
	}
    }
}

タブサイズを空白8つ分に設定すると正常に表示されたりするのもまた我慢ならない。

case句とswitch文が同列に書かれてる

switch (type) {
case Left:  return "L";
case Right: return "R";
}

あまり構造的なコードではなく、直感性に欠けるため我慢ならない。

ネストが浅くなるというメリットもあるため、少し我慢して使ってみるのもよいかもしれない。シンタックスハイライトで工夫すれば気にならなくなる。

switch (type) {
case Left:  return "L";
case Right: return "R";
}

丸括弧と波括弧の間の空白を省略

// 我慢ならない
if (cond){}
// 無難
if (cond) {}
// 怠慢
if(cond){}

もっとも空白の省略にもそれなりの利点がある。) {よりも){のほうがタイプ数が少なくなるという利点がある。またShiftキーを押しながら連続で){をタイプできるため、高速な入力を実現できる。

ちなみに、適切な空白の利用は、処理の意味や目的を明確化することに繋がる。直感的で曖昧さの少ないコードを実現することができる。

if cond {
   return a.map{
      String(_).toUpperCase()
   }
}

// if cond{} ← これだとクロージャ引数渡しの省略記法(a.map{})と判別しずらい

書きやすさと読みやすさは常にトレードオフの関係にある。ちなみにLispというプログラミング言語は書きづらいわりに読みづらい。まさに二重苦である。もっとも、慣れれば書きやすく読みやすい言語に感じられるようになる。奥の深い言語でもある。

波括弧を改行した後に書く

おもにMicrosoft系の案件。クラス宣言時やメソッド/関数定義時に限定するならまだしも、if文やelse文にまで採用するのはやり過ぎな気がして我慢ならない。

// 我慢ならない
int main(int argc)
{ 
   if (argc < 2) 
   {
      return -1;
   }
   else
   {
      return 0;
   }
}
// 我慢する
int main(int argc)
{ 
   if (argc < 2) {
      return -1;
   }
   else {
      return 0;
   }
}

やたらと空白を使いまくるコード

主にPHP案件。

if ( $v = $this -> post( 'age', 0 ) ) {
   if (! cond() )
      echo $v , "\n" ;
}

そんなに空白が好きか。君は空白で東京ドーム何個分の愛を伝えようとしているんだ? そいつへの愛はスペース級なのか? 宇宙的規模のラブで I want you なんだな? おぉん!?

シンタックスハイライトが適切に効いたテキストエディタを使えば、空白は自ずと不要になる。各トークンを識別する際には文字の間隔ではなく色を意識するようにすれば良い。

print($this->value());      // このゴチャゴチャした感じが読みづらい
print ( $this -> value() ); // 空白を入れると判読しやすくなる気がする
print($this->value());      // 本当に必要だったもの

やたらと警告しまくるコンパイラ

コンパイラの警告は色々便利なんだけど、要らん所で警告を出しまくるので少し鬱陶しい感がある。

// warning: '&&' within '||' Place parentheses around the '&&' expression to silence this warning
if (a && b || c) printf("");

プログラマならこれくらいの優先順位把握してるだろっていう記述でも警告してくる。これでもかってくらいに警告してくる。

だから仕方なく丸括弧で囲う。刺し身にたんぽぽを乗せる要領でそっと括弧を添える。

if ((a && b) || c) printf("");

でも何だか『あんたどうせ演算子の優先順位知らないんでしょ? 私がチェックしておいたからありがたく警告されなさい!』ってドヤ顔で言われているようで少しだけ萌える気もする。

以上C言語コンパイラー、ツンデレ機能の紹介でした。

コンパイラ「別にアンタのために警告してるわけじゃないんだからね!」
俺「お、おう…///」

なんで照れてんだよ。

「静的」と「低レベル」という言葉が使いづらい

「低レベル」は簡単なコーディングや程度の低いプログラミングを意味しているような気がして我慢ならない。「低レイヤー」と呼ぶようにすると良いのではないか。

「静的」はなんとなく声に出して読むのが恥ずかしい気がして我慢ならない。

俺氏「#&!%コンテンツで」
女性社員「はい?」

if (true)/if (false)という謎コード

if (true) { puts("うー"); }
if (false) { puts("にゃー"); }
if (1 == 1) { puts("にゃー"); } // 量子力学かな?

思わず自身の常識すらをも疑ってしまったので我慢ならない。

ちなみにif (false)については、ブロック文を一時的にコメントアウトする用途として使われることもある。

コメント・テクニック集 - false式によるコメントアウト

また条件式の規則的な列挙を実現するためにダミーのtrue式が使われることもある。こちらは比較的合理的なテクニックである。

select * from t where 1 = 1
   and t.id >= 0
   and t.id <= 9

if (1 == 1
   && c != '\n'
   && c != '\r'
) {}
コード整列のススメ # 条件式を揃える

メソッド名が大文字で始まる

おもにGoとC#、あとMicrosoft系の案件。クラスや列挙型と区別するためにもメソッド名は小文字で始めるべきだと思うので我慢ならない。

func Method(String string) {
   stdio.Println(string.Concat(string));
   Method("我慢ならない");
}

思わず左にnewと書きたくなるのがまた我慢ならない(Java脳)。

/*new */Method("我慢ならない");

何でもかんでもアッパーキャメルケースを使うので、クラス名やメソッド名、プロパティ、定数の区別が付きにくい。

Screen.MainScreen.Bounds.MaxY;
Screen.mainScreen().bounds.maxY();
スネークケースや小文字の識別子が主体のC++であれば、大文字によって関数名と組み込み型を区別できるため、有効な面もある。(type_name MethodName(type_name paramName)
また、名前空間やモジュール名を多用する言語の場合は、名前空間明示時に関数名が際立つ(fmt.Println("hello")

PHPが幅を利かせている

もはや社会インフラと言っても過言ではないWordPress(世界シェアNo1のブログシステム)とMediaWiki(Wikipediaで有名なウィキシステム)がPHPを採用していて我慢ならない。

何でもかんでもPHPと少ない工数で作りたがる営業にもまた我慢ならない。

Node.jsやRuby on Rails、サーバーサイドKotlin/Swiftがもっと流行って欲しいのにいまいちな状況なのもまた我慢ならない。

PHPのバカ野郎が他の追随を許さない

PHPは散漫でだらしない言語である。言語設計も破綻している。命名規則や引数の順序に一貫性がなかったり、コールバック関数を文字列で渡さなければならなかったり、print文が関数じゃなかったり、素人が見てもわかるちゃっちい言語である。まるでハウルの動く城のようである。こんな言語が我が物顔でWeb業界にのさばっている。

$a = array('a', '2', 'c');
$a = array_filter($a, 'ctype_alpha');
$a = array_map('strtoupper', $a);
array_walk($a, function ($v) { print($v); });
// 出力結果: "AC"

/* 超法規的措置 */
function _print($v) { print($v); }
define('_print', '_print');
array_walk($a, _print); // "AC"

極めてクソ言語である。360度どこから見てもクソ言語である。自ら豆腐の角に頭を打ち付け、死してその屍を晒せ。私の全てがそれを望んでいる。うどんで首を括り、死してその身を晒せ。アラン・チューリングもきっとそれを望んでいる。

WordPress関連の公式サイトが重たい

WordPress関連の公式マニュアルやソースビューアは総じて読み込みが遅い。WordPress開発者が頻繁にお世話になっているサイトにも関わらず、10年代のWikipedia並に重たいので我慢ならない。

MediaWikiの重たさ、ひいてはPHPの重たさが原因になっているのではないかと疑いたくなるのもまた我慢ならない。この自身の懐疑心にひどく失望の念を抱かざるを得ない。

PHP関連のサイトのサンプルコードは質が悪い

PHP系の技術ブログはわりと適当に書かれていることが多いので我慢ならない。非推奨の関数が使われていたりもする。他のサイトから切り貼りしたような一貫性のないコードが多いのがなんとも我慢ならない。

PHPerのコードは十人十色で協調性が無く、記法にばらつきが多い印象がある。だたし全体的には# やたらと空白を使いまくるコードが多い傾向がみられる。たまに空白を用いないコードが中途半端に混在していたりもする。

function fn ( $a=0, $b=true ){
   for ( $i=0; $i<9; $i++ ) {}
}

PHP独自のプログラミング文化が出来上がってしまっている。几帳面で潔癖なJavaと、適当でだらしないPHPという、真逆の文化という印象。

RubyやJavaScriptの怠慢さはそれなりに受け入れられるが、PHPのだらしなさはどうしても我慢ならない。怠慢さとだらしなさは別物である。至極我慢ならない。

WindowsのUIが毎回コロコロ変わる

プログラミングとはあまり関係がない気がするけど我慢ならない。

システム設定画面の開き方がOSが新しくなる度に替わるのはどうしても我慢ならない。Macは昔から変わらない手順でしかも2クリックで開けるので我慢ならない。

我慢ならないコードまとめ

class X{
	void method( int a , int b ){
	    if(! a)
	    {
	        return;
	    }
	    else
	    {
	        echo ( a, b ) ;
	    }
	}
}

C++を「シーピーピー」と読む

シーと読むだけでもう既に恥ずかしいのに、そこにピーを2つ付けて呼ぶ奴の気が知れない。

広告