BlueRayi 2019-01-16 02:35:13

[Java] 無意味に無意味をかけて 100 倍だ このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

個人的にはいまだにヨーダ強要な弊社規約にも物申したいところではあるが

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        List<Object> someList = new ArrayList<>();

        /* some operation */

        if (null != someList) {
            if (true != someList.isEmpty()) {
                for (Object element : someList) {
                    System.out.println(element);
                }
            } else {
                System.out.println("List is empty.");
            }
        } else {
            System.out.println("List is null.");
        }
    }
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(2)

#1 InternalServerE 2019-03-11 18:54:01  

ヨーダ云々は人により意見の割れる話題であり、有名なOSSのソースにも割と普通に登場しているくらい、市民権も得たコードスタイルだったりもする。一概にウンコと呼んでしまうのは価値観が偏っている印象。

それよりも、コードの階層を不必要に深く書いてることの方がずっと気になる。

#2 BlueRayi 2019-12-11 06:47:52  

InternalServerE さん

誤解があるようですが、別にこの投稿はヨーダ記法がウンコだと言いたいわけではありません。 諸説あることも理解しています。 確かにアピールポイントに書くべき内容ではなかったかもしれません。 これは私のミスです。

その上で あえて 反論させていただきます。

Java に限って、ヨーダ記法は(ほぼ)無意味

ヨーダ記法は条件式として等値比較と代入を取り違えたときにコンパイラエラーを発生させることによってバグを事前に予防するというノウハウと理解しています。

しかし、Java においては条件式として利用可能なのは  boolean 型のみであり、もし等値比較と代入を取り違えればヨーダ記法でなくても型エラーが発生します。 ゆえに Java に限ってはヨーダ記法である意味がないのです (ただし、boolean のラッパークラス変数にnullを代入してしまった場合に関しては実行時にこそエラーになりますがコンパイラは捕捉してくれません。 ですので 9 行目はギリギリ意味があるかもしれません) (boolean 型の等値比較と代入を取り違えたときはどうかって? それこそが私がこれを投稿した理由です)。

一方で Java で意味のある、見た目がヨーダライクなノウハウにif ("some_strings".equals(s))というものがあります。 これはif (s.equals("some_strings"))とするとsnullだったときに発生するぬるぽを抑制するという意味があります。 これもぬるぽを隠蔽してしまうのが正しいのかという議論はあると思いますが、nullが入る可能性を承知のうえで、その場合は偽としたいと思っている場合、Null チェックを書き足すよりもスマートな方法でしょう。

一般的であるイコール正しいではない

世の中に普及しているという事実は正当性を担保するものではありません。

たとえば、セキュリティに厳しい金融企業のサイトほど、しつこく「定期的にパスワードを変更しろ」と通知してきます。 しかしパスワードを定期変更することでセキュリティを向上することはないということはいまや提唱者さえも認めています。

世の中に普及しているから問題ないのだ、という理屈は「伝統に訴える論証」と呼ばれ、誤謬あるいは詭弁の一種です。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] is禁止令

このエントリーをはてなブックマークに追加

ウンコードの趣旨とは違い、レビューで指摘...

// Mod yamada Start

// 一般的に考えて真偽値を返すメ...

鑑賞する »

[Java] 内部的にunicodeだから日本語つかえ...

このエントリーをはてなブックマークに追加

これを書いた先輩に「英語で書きましょうよ...

class 会員 {
    private int 会員番号;
    p...

鑑賞する »

[Java] もうコメント書くなお前

このエントリーをはてなブックマークに追加

改修案件でぶち当たったソース マジでこ...

/**
  *
  *   〇〇の値を取得する
  *
  */
pu...

鑑賞する »