セパレートをつけるプログラムって結構記述することが多い。
カンマ区切り(csv)、タブ区切り(tsv)、スペース区切りとかが多い。
だいたい、最後に余分なセパレートを削除するか、初回のみセパレートを追加しない
ってやっていたんだけど、素晴らしいプログラムイディオムを知った。
何かで区切るする表現、splitter – Javaとかで学ぶ、すぐに使いたくなる洗練されたプログラムイディオム集
http://pgkiss.web.fc2.com/idiom/splitter.html
if文消しゴム – Javaとかで学ぶ、すぐに使いたくなる洗練されたプログラムイディオム集
http://pgkiss.web.fc2.com/idiom/ifRemover.html
末尾のセパレートを消す、最初のセパレートを消すという処理があるけど。
static String join(String separator, Iterable<?> list) { StringBuilder result = new StringBuilder(); String delimiter = ""; for (Object e : list) { result.append(delimiter); result.append(e.toString()); delimiter = separator; } return result.toString(); }
最初の区切りを出力しないのではなく、最初だけ空文字列を区切りとして出力することで、if文を不要にしている。
文字列の連結の場合、空文字列を連結することは何もしないことと同じだ。
何もしないことと同等な操作をNOP(NO Operation)というが(もともとアセンブリ言語の命令)、この場合空文字列はNOPにあたる。
NOPをうまく使うことで、特別扱いしなければならないパターンを取り除きプログラムをシンプルにすることができる場合がある。
多少、処理は重たいかもしれないけど、可読性もいいし、これからはこの方法を使おうっと。