読者です 読者をやめる 読者になる 読者になる

What we talk about when we talk about Technology

技術について語ります。

デザインレシピ完全版

これまでのデザインレシピに再帰関数の場合を加えた、
完全版のデザインレシピは以下の通り。

1.データ定義<<extension: 入出力にデータ定義を伴う場合>>
入力または出力で使用するデータを定義する。
再帰的なデータ型(リストなど)である場合、自己参照のケースを付記する。

2.目的
作成する関数の目的、引数、返り値を決定する。
目的をもとに関数名を決定し、ヘッダを作成する。

3.例
作成する関数に対する入力の例とそれに対応する出力の期待値を作成する。
例をもとにテストプログラムを作成する。
<<extension: 条件文を含む場合>>
場合分けのパターンを列挙し、すべての場合について例を作成する。
特に境界値の周辺の例に気をつける。
<<extension: 再帰的なデータを含む場合>>
基本的なケースと再帰的なケース両方を必ず含める。

4.テンプレート<<extension: 入力が構造を持つデータまたは再帰的なデータの場合>>
構造に応じたmatch文を作成する。
使えるパターン変数と、再帰的なデータの場合はどの変数が再帰的かについても付記する。
条件文を使うことが明らかな場合は条件文のテンプレートも作成しておく。

5.本体(1)<<extension: 条件を含む場合>>
本体作成の前に、場合分けの条件を特定する。
条件をもとに関数の大枠を作成する。

6.本体(2)
関数の本体を実装する。
出来上がった関数が再帰的な場合はletの後にrecを挿入する。
<<extension: 条件を含む場合>>
それぞれのケースを実装する。
ひとつ実装するごとにテストを実行し、成功することを確認して、次のケースを実装する。
<<extension: 再帰的なデータを含む場合>>
再帰呼び出しの意味するところを目的を使って理解する。

7.テスト
テストプログラムを実行し、成功することを確かめる。

データ定義に対するデザインレシピ

関数の入出力にレコードを必要とする場合、これまでの項目の先頭にデータ定義の項目が入る。

1.データ定義
入力データ、出力データに必要なレコードの型を定義する。

2.目的

3.例

4.テンプレート

5.本体

6.テスト

構造データに対するデザインレシピ

関数が構造(組やレコードやリスト等)を含む場合、
テンプレート項目を本体の前に加える。

1.目的

2.例

3.テンプレート
構造の中身を取り出すmatch文を作成する。

4.本体

5.テスト

条件分岐を伴う場合のデザインレシピ

関数に条件分岐が伴う場合、拡張として条件分岐のデザインレシピを使う。


場合分けのパターンを列挙し、すべての場合について例を作成する。
特に境界値の周辺の例に気をつける。

本体(1)
本体作成の前に、場合分けの条件を特定する。
条件をもとに関数の大枠を作成する。

本体(2)
それぞれのケースを実装する。
ひとつ実装するごとにテストを実行し、成功することを確認して、次のケースを実装する。

関数作成のデザインレシピ

1.目的
関数の役割、関数の型(引数・返り値)、関数名を決定する。

2.例
具体的な入力と、それに対する出力の期待値の組を(幾つか)作成する。

3.本体
関数の本体を実装する。

4.テスト
例をもとにテストを作成し、成功することを確認する。

2015-2016書籍目録

去年の5月にキャリアスタートしたエンジニア2年生です。
備忘録を兼ねて、一年間で読んだ書籍を赤裸々に列挙したいと思います。
気づけば7月も後半で、タイミングは謎ですがご容赦ください🙇

iOSObjective-C・Swift

インフラ・ネットワーク

Haskell

データベース

Git

UNIX

デザイン

プロジェクト

一般

おわりに

2016-2017はとりあえずこれ以上の冊数読めるよう精進いたします。
おすすめの本ありましたら是非教えてください。

メモ

ReSwiftに挫折する日曜日。

エンジニアをやっていると「今日はダメだ。。」という日が(しょっちゅう)ある。

今日は気になっていたReSwiftを調べてみた。

github.com

きっかけは以下のブログ。

in.fablic.co.jp

他にも、

qiita.com

や、

qiita.com

を見て、Reduxへの興味が積もっていた。

ということで、ドキュメントをつらつらと読み、
サンプルを書いてみようということで、carthage update

** BUILD FAILED **


The following build commands failed:
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistorySliderView.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryCollectionViewCell.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryView.swift
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(5 failures)
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
A shell task (/usr/bin/xcrun xcodebuild -project /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder.xcodeproj -scheme ReSwiftRecorder -configuration Release -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES clean build) failed with exit code 65:
** BUILD FAILED **


The following build commands failed:
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistorySliderView.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryCollectionViewCell.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryView.swift
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(5 failures)

むむむ。。。

ReSwift-Recorderが、依存しているReSwiftモジュールをうまく参照できてない模様。

carthageのバージョンが最新じゃなかったので、
アップデートしてみようと思ったのだけども、
どうやらhomebrewではなくパッケージインストールしていたらしい。

というわけで、homebrewでインストール、それまでのcarthageをrmしてcarthage update

dyld: Library not loaded: @rpath/libswiftAppKit.dylib
  Referenced from: /usr/local/bin/carthage
  Reason: Incompatible library version: carthage requires version 1.0.0 or later, but libswiftAppKit.dylib provides version 0.0.0
zsh: trace trap  carthage version

おお。。。

github.com

これっぽいんだけども、/Library/Frameworksがない。。。

仕方なく、再びパッケージでインストールしてcarthage update

** BUILD FAILED **


The following build commands failed:
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistorySliderView.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryCollectionViewCell.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryView.swift
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(5 failures)
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
/Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift:10:8: error: no such module 'ReSwift'
A shell task (/usr/bin/xcrun xcodebuild -project /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder.xcodeproj -scheme ReSwiftRecorder -configuration Release -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES clean build) failed with exit code 65:
** BUILD FAILED **


The following build commands failed:
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/RecordingStore.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistorySliderView.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryCollectionViewCell.swift
    CompileSwift normal arm64 /Users/kentakudo/Desktop/CounterExample/Carthage/Checkouts/ReSwift-Recorder/ReSwiftRecorder/UI/StateHistoryView.swift
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(5 failures)

再び。orz。

今日はここで心折れました。。

おとなしくcocoapods使えばいいんかな。。