Scala におけるコード進化パターン (Code Evolution Patterns in Scala)
asato shimotaki <asatohan at gmail.com>
最終更新日 : 2008/11/16 (2008/8/24 より)
はじめに
Scala 基本関連
Class 関連
クラスの追加
タイプ:
進化タイプ:
前提:
構成要素: before:object Main extends Application { }after:
class MyClass { }
object Main extends Application { val my = new MyClass }
進化リクエスタ/プロバイダ
議論
例
進化パス
パターン関係
関連パターン
参考文献とリソース
その他/疑問
Method 関連
メソッドボディの変更
タイプ:
進化タイプ:
前提:
構成要素: before:object Main extends Application { val my = new MyClass my.myMethod }
class MyClass { def myMethod = { println("MyClass.myMethod") } }after:
object Main extends Application { val my = new MyClass my.myMethod }
class MyClass { def myMethod = { println("*** MyClass.myMethod ***") } }
進化リクエスタ/プロバイダ
議論
例
進化パス
パターン関係
関連パターン
参考文献とリソース
その他/疑問
Java から Scala 関連
interface から trait への変換
タイプ:
進化タイプ:
前提:
構成要素: before:// Java public interface MyInterface { public void method(); }
// Java public class MyInterfaceImpl implements MyInterface { @Override public void method() { System.out.println("MyInterfaceImpl.method()"); } }
// java public class MyInterfaceClient { public static void main(String[] args) { MyInterface my = new MyInterfaceImpl(); my.method(); } }after:
// Scala trait MyInterface { def method }
// Java public class MyInterfaceImpl implements MyInterface { // interface として trait を implement public void method() { System.out.println("MyInterfaceImpl.method()"); } }
// Java public class MyInterfaceClient { public static void main(String[] args) { MyInterface my = new MyInterfaceImpl(); my.method(); } }
進化リクエスタ/プロバイダ
議論
例
パターン関係
進化パス
関連パターン
参考文献とリソース
その他/疑問
Content Filter interface から trait への変換
タイプ:
進化タイプ:
前提:
構成要素: before:// Java public class Item { private String name; public Item(String name) { this.name = name; } public String getName() { return name; } }
// Java public interface ItemFilter { // Content Filter public boolean accept(Item item); }
// java public class ItemContainer { private List- items = new ArrayList
- (); public void addItem(Item i) { items.add(i); } public List
- getItems(ItemFilter filter) { List
- accepted = new ArrayList
- (); for(Item i : items) { if (filter.accept(i)) { accepted.add(i); } } return accepted; } }
// java public class ItemContainerClient { public static void main(String[] args) { ItemContainer c = new ItemContainer(); c.addItem( new Item("a") ); c.addItem( new Item("b") ); Listafter:- items = c.getItems(new ItemFilter() { @Override public boolean accept(Item item) { return item.getName().equals("a"); } }); for(Item i : items) { System.out.println(i.getName()); // "a" } } }
// Java public class Item { private String name; public Item(String name) { this.name = name; } public String getName() { return name; } }
// Scala trait ItemFilter { def accept(item: Item): Boolean }
// java public class ItemContainer { private List- items = new ArrayList
- (); public void addItem(Item i) { items.add(i); } public List
- getItems(ItemFilter filter) { List
- accepted = new ArrayList
- (); for(Item i : items) { if (filter.accept(i)) { accepted.add(i); } } return accepted; } }
// java public class ItemContainerClient { public static void main(String[] args) { ItemContainer c = new ItemContainer(); c.addItem( new Item("a") ); c.addItem( new Item("b") ); List- items = c.getItems(new ItemFilter() { @Override public boolean accept(Item item) { return item.getName().equals("a"); } }); for(Item i : items) { System.out.println(i.getName()); // "a" } } }
進化リクエスタ/プロバイダ
議論
例
パターン関係
進化パス
関連パターン
参考文献とリソース
その他/疑問
更新履歴
todo