突っ走り書き

見せるほどのものでは..

Java

List と Set の使い分けは 『順序の有無』と『検索の有無』

List と Set の使い分けの話.Java の List と Set の概念的な違いは「順序があるかどうか」です. List:順序を考慮するオブジェクトの集まり Set:順序を考慮しないオブジェクトの集まり これまで,順序の有無だけで List と Set を選択していたんですが,…

畳み込まずに Stream#flatMap を使う

Java8 の Stream 型に,flatMap ってメソッドがあることを知った.reduce(畳み込み)の代わりに使える. reduce Set<Person> byReduce = teams.stream() .map ( team -> team.listMember() ) .reduce( Collections.emptySet(), (a, b) -> Sets.union(a, b) ); flatM</person>…

Get & Put戦略

Javaにおいてパラメータ化された型は不変です.例えば,List<Integer> は List<Object> の下位型ではありません.このような「不変」であるという性質は,ソフトウェアの柔軟性を損なう原因になり得ます.Javaでは,この問題点を解決するため 上限境界ワイルドカード 下限境</object></integer>…

Arrays.asList の戻り値は ArrayList でも LinkedList でもない

Java の Arrays は,配列のためのユーティリティクラスです.痒いところに手が届く関数がたくさんあるので思いのほか使えます.その中で特に重宝してるのが Arrays.asList です.これを使うとリストの生成と初期化をスタイリッシュに書くことができます. //…

【Jeff Bay】オブジェクト指向エクササイズ

Jeff Bay は The ThoughtWorks Anthology の中で,オブジェクト指向エクササイズ(Object Calisthenics)を提案しています.このエクササイズでは,次の9つのルールを守らなければいけません. メソッドのインデントは1つまで else句を使わない すべてのプリミ…

デフォルトコンストラクタではすべてのフィールドを引数として受け取るべき

Java & オーバーロード & コンストラクタ Javaでは,オーバーロードによって複数のコンストラクタを定義できます.例えば,Personの集合を表すPeopleクラスには,次のコンストラクタがあります. public People { private Set<Person> people; public People() { thi</person>…

クエリメソッドのための Any オブジェクトパターン

SetやListなどのコレクションを全く使わないプログラミングはほとんど有り得ません.コレクションを使うとなれば,その中から特定の条件を満たすオブジェクトを抽出するメソッドが必要になることがあります.このエントリでは,コレクションに対するクエリメ…

オブジェクトの情報は getter から流出する

情報を隠蔽せよ public Book { private String title; private int price; public Book(String title, int price) { this.title = title; this.price = price; } public String getTitle() { return name; } public int getPrice() { return price; } } オブ…

【Jeff Bay】オブジェクト指向エクササイズがキツすぎて

Jeff Bay は ThoughtWorks Anthology の中で,オブジェクト指向エクササイズを提案しています.エクササイズでは,9つのルールを守らなければいけません.それぞれのルールの解説は他の方にお任せするとして,実際にやってみてどうしても両立できなかったル…

リファクタリングのために getter を private にしてみれば?

オブジェクト指向言語の参考書では フィールドを private に フィールドの取得は getter を使って が基本のように書いていることが多いように思います.でも,その getter は本当に必要ですか?もしかしたら getter がクラス間の関係を複雑にしているかもしれ…

インターフェースで余計なことを書かない

Java のインターフェースには,暗黙に public となるものがあります.エレガントなコードを目指して,無駄な修飾子を取っ払いましょう. Before interface MyInterFace { public static final int MAX = 256; abstruct public void do(); } After interface …

インターフェースの意味

Java: The Good Parts を読んで印象に残ったことの覚え書き. 設計の2段階 Javaにおけるオブジェクトの設計は,大きく2段階ある(と思う). 目的を決める = インターフェースの設計 戦略を考える = クラスの設計 インターフェースの良し悪し インターフェー…

Java 命名規則

メソッド名 原則 操作を行うメソッド 「操作を表す動詞」+「目的語」 add, remove, putChar, ... 値を返すメソッド 「戻り値を表す名詞」 size, length, ... 例外 ゲッタ get + 「フィールド名」 getId(); セッタ set + 「フィールド名」 setId(); 変換メソ…

拡張for文が便利

若者らしい Java を書く JavaはC言語と似た構文なので,for 文は以下のように書けます. Set<String> names; for (int i = 0; names.size(); i++) { String n = names.get(i); System.out.println(n); } 実は,Javaの拡張for文を使って,もっとスタイリッシュに書け</string>…

java.util.List について

主なライブラリの構成 Java 初心者が知ってれば良さそうなものだけを. java.util.List java.util.LinkedList java.util.ArrayList データ構造としての Set 順序に意味がある(= 重複を許す) ある型 or その下位型のみから構成される 大まかに言えば,順番…

java.util.Set について

主なライブラリの構成 Java 初心者が知ってれば良さそうなものだけを. java.util.Set java.util.HashSet java.util.TreeSet 実装は... 内部では HashMap を使って実装しているらしい. データ構造としての Set 順序が無い 重複が無い ある型 or その下位型…

抽象を具体に落とし込む

コレクションから要素を取り出す コレクションに対する操作の抽象概念の1つに, (抽象概念)コレクションの要素を取り出す がある.イテレータは,要素の取り出しに関する抽象的概念を具体的な操作に落とし込んだ概念にあたる. (具体概念1)コレクション…

Javaプログラミングのディレクトリ構成(案)

自分以外の人はどうやってるんだろうか??気になる気になる。ChangeLog は使わずに、org-remenber で変更点などのメモをとる。 project |- build.xml |- README.org |- src/ | |- Foo.java | : : <-- (以下、antのビルドで生成されるファイル) --> : |- bin/ …