改行とプロダクト品質について
こんにちは。watahiroです。今回はソースコードの改行について書きたいと思います。ソースコードの改行でまず思い浮かぶのはコーディング規約です。最近ではLinterやFormatterなどを活用してコーディング規約を自動的に適用することも多くなってきました。
ソースコードの改行はコード品質、特にコードの可読性の観点で語られることが多いように思います。可読性は人によって読みやすい書き方が異なるため、「適切に改行して読みやすく」という曖昧な表現ですと人によるブレが大きくなりがちです。
そこで、コード品質ではなくプロダクト品質に直結する観点で、改行が有効なケースについて、サンプルコードを交えながら紹介したい思います。
プロダクト品質に直結する観点として着目するのは、スタックトレースからの原因特定のしやすさです。最初からバグのないプログラムを書ければ良いのですが、不可能に近い目標であることは明白です。ですので、発生した問題をいかに早く原因特定し、修正できるか。と考えた場合に、スタックトレースから原因を特定しやすくしておくことは品質に直結します。
以下のようなスタックトレースの原因を特定してみましょう。
Exception in thread "main" java.lang.NullPointerException
at com.wingarc.note.newline.NewLine.test(NewLine.java:10)
at com.wingarc.note.newline.NewLine.main(NewLine.java:6)
NewLine.javaの10行目は以下のような実装でした。
public static void test(Integer width, Integer height) {
new Builder().width(width).height(height).build();
}
widthかheightでnullでintにキャストできない、もしくはどこかのメソッドの戻り値がnullだった可能性が考えられます。今回のケースではメソッドの戻り値がnullかは実装から容易に確認できます。しかしながらnullをintにキャストするケースについては、引数の情報がなくてはどちらで例外が発生しているのかはわかりません。
以下のように改行しておくとどうでしょうか。
public static void test(Integer width, Integer height) {
new Builder()
.width(width)
.height(height)
.build();
}
Exception in thread "main" java.lang.NullPointerException
at com.wingarc.note.newline.NewLine.test(NewLine.java:11)
at com.wingarc.note.newline.NewLine.main(NewLine.java:6)
11行目は.width(width)の行ですので、widthがnullであることが明確になりました。
非常に簡単で基本的なことですが、こんな些細なことでも品質を上げることが可能です。
実は、上記のスタックトレースはJava8のもので、Java11以降ではエラーメッセージから原因を特定することも可能になっています。最新のJavaVMを使用している場合は不要なテクニックになってしまいましたが、スタックトレースを意識して改行をすると、改行のポイントが明確になりやすいと思いますので、1つの観点として念頭に置いても良いのではないでしょうか。
#エンジニア #ITエンジニア #開発 #ウイングアーク #ウイングアーク1st #テックブログ #エンジニア転職 #エンジニア採用