見出し画像

Unreadable Codeの極み

こんにちは。名古屋の建築学生をやっているM1の学生です。

記事の画像はとりあえず猫にしておけばいいかなと。猫好きに悪い人はいない。あと、"イライラ"で検索したらこの猫がフリーライセンスで出てきたので。

あらすじ

私は大学院で都市系の研究室に所属し、Unity-C#を用いた開発プロジェクトに参加しています。
そのプロジェクトでは、メインのプログラマーとして自分を含めM1の学生2名がいて、お互いに開発初期(M1の4月頃)から暗黙の了解でコーディング規則を察しながらUnity-C#を使ってメインプログラムを書き上げました。

しかしM1も終盤にかかり、お互いに就職活動をしなければならなく、メインプログラムを他所属の自称プログラマーに手渡すことになりました。

お互いに就職活動に勤しみながら、slackにアップロードされるプログラムの改変ログ(Githubを使えよとか思いながら、、、)を眺めていると、可読性の欠片もない不思議なコードたちが流れてくるではありませんか。

そこで私は思いつきました。もう自分ではこのコードは修正できないほど不思議なことになっているし、もうネタにしてやろう、と。

とあらすじはここまでにして、Readable Codeに敬意を示しつつ、確実に見たプログラマーをイライラさせるUnreadable Codeを書く方法をお教えします。

(ちなみにReadable CodeはQiitaやGithubに和訳要約版が転がっていたり、英語版だとpdfが転がっていたりするので、可読性の高いコードを書きたい方はそちらを探してみてください。)

1-インデックスをなくす

まずは通常の例を見てみましょう。

class Test1{

    static void Hello(){

        int num = 1;

        if(num == 1){
            Console.WriteLine("Hello World");

        }else{.........略}
    }
}

これだとすんなり頭に入ってきて、あまりイライラさせることができませんね。そこで、

class Test1{
    static void Hello(){
    int num = 1;
if(num == 1){
Console.WriteLine("Hello World");
        }else{.........略}
    }
}

コードのインデックスを無くし、可読性を低くしましょう。これでまず相手はメソッドがどこまで続き、if文がどこで処理しているかわからなくなるので、確実にイライラさせることができます。

2-フィールドとメソッドの順序をなくす

class Test1{
    
    int a = 1;
    int b = 2;
    int c = 3;

    void def1(){
    }

    void def2(){
    }

    void def3(){
    }
}

通常、クラス内ではフィールドを先に書き、メソッドをあとでまとめて書くことが多いです。

しかし、またしてもこれでは可読性が高すぎて相手に空気のように読ませてしまいます。もう少し相手に印象を残す書き方がこちらです。

class Test1{
    
    int a = 1;
    void def1(){
    }
    void def2(){
    }
    int b = 2;
    int c = 3;
    void def3(){
    }

}

このようにすればきっと相手をイライラさせることができます。

3-Update関数内にメソッドを作成する(Unityのみ)

もしあなたがUnityで開発していれば、Start関数やUpdate関数で実行処理を行なっていることはわかっていると思います。

public class Test : MonoBehaviour{

    private int Hogehoge(){
    ....略
    }

    // Use this for initialization
    void Start(){
    }

    // Update is called once per frame
    void Update(){
            Hogehoge();
    }
}

いいですか、読みやすいコードは相手に印象付けることができませんし、イライラさせることだってできないのです。

public class Test : MonoBehaviour{

    // Use this for initialization
    void Start(){
    }

    // Update is called once per frame
    void Update(){
        private int Hogehoge(){
        ....略
        }
        Hogehoge();
    }
}

どうでしょう。Update関数に入れ込むことで関数定義だって毎フレーム行われ、Update関数の中身が長くなりどこまで続くかわかりづらくなったでしょう。

さいごに

初めてコードを書かれる方もいるかと思いますが、恐れずどんどんコードを量産していきましょう。最初からReadable Codeをかける人はいません(自分もまだまだ未熟です、、、精進します)。コードは書いただけ強くなれます。

なぜこの記事書いたかって?

手渡したプログラマーがもともとSEやってた人だったっていう(白目)

世界は広いですね。

他にもイライラ経験があるプログラマーの方がいらしたら、コメント等ご紹介いただけると面白いかと。

では。

※このエピソードはノンフィクションです

この記事が気に入ったらサポートをしてみませんか?