Más contenido relacionado Similar a 「エクストリームエンジニアへの道(Swift編)」 (20) 「エクストリームエンジニアへの道(Swift編)」6. class Money {
var amount: Double = 0
var currency: String = ""
var rates: Dictionary<String, Double> = ["USDYEN": 120, "USDEUR": 1.2]
func setAmount(inputMoney: Double){
amount = inputMoney
}
func setCurrency(cur: String){
currency = cur
}
func convert(convertMoney: Money) -> Money {
convertMoney.setAmount(amount*rates[currency+convertMoney.currency]!)
return convertMoney
}
func getAmount() -> Double {
return amount
オブジェクト指向コード
14. テストコードの作成
func testMoneyCreation() {
money = Money()
money.setCurrency("USD")
money.setAmount(10)
XCTAssert(10 == money.getAmount(), "Test Money Amount”)
func testYenConversion() {
money = Money()
money.setCurrency("USD")
money.setAmount(10)
convertMoney = Yen()
convertMoney.setCurrency("YEN")
XCTAssert("1200" == money.convert(convertMoney).displayAmount(), "Test Yen
Convert")
}
24. 振る舞いに関するパターン(2/2)
No. パターン名 目的
6 Memento インスタンスの状態を戻せるようにする
7 Observer 状態の変化が自動的に通知され、更新される
8 State 状態にあわせて動作を変える
9 Strategy アルゴリズムをカプセル化して交換可能にする
10 Template Method 特定の処理をサブクラスで行う
11 Visitor 構造と処理を分離する
28. アブストラクトファクトリー(振る舞い)
: Client
1 : createProductA()
3 : createProductB()
5 : Use ProductA
6 : Use ProductB
: ConcreteFactory1
2 : new
4 : new
: ProductA1
PruductB1
34. • リファクタリングのきっかけとなる、設計上の問題
コードの臭い(code smell)
臭い 状態
重複したコード 同じ処理が複数個所に存在する
長すぎるメソッド 一つのメソッドに多くの処理が記述されている
巨大なクラス あるクラスが、責務を多く持ちすぎている
多すぎる引数 メソッドに渡す引数の数が多すぎる
変更の発散 1つのクラスがさまざまな変更要求の影響を被る
変更の分散 1つの変更要求によって、複数のクラスが影響を被る
属性、操作の横恋慕 自クラスより他クラスの属性、操作と関連が深い
データの群れ 数個のデータがグループとなって各所に現れる
基本データ型への執着 基本データ型を使用し、複雑なロジックが記述されている
スイッチ文 スイッチ文により設計が複雑化、硬直化している
パラレル継承 あるクラスの継承ツリーと、他のクラスの継承ツリーに関連がある。
表. コードの臭いの例 出典:リファクタリング
52. • 関数
• 高階関数
• クロージャー
• 遅延評価
• 並列処理
• イミュータブル
• ラムダ式
• マイクロサービス
関数型プログラミングの特徴