LoginSignup
1
0

More than 5 years have passed since last update.

メソッドを読みやすく維持するいくつかの原則という記事のわからないところまとめ

Last updated at Posted at 2017-03-29

この記事を読んで自分なりにわからないところをまとめながら理解していく

ディスパッチテーブル

ディスパッチテーブル(キーと関数・メソッドの対応表)などを使って次の処理(関数)などを呼び出すこと

productメソッド

tx = %w(1 2 3 4 5)
ty = %w(a b c d e)

for point in tx.product(ty) 
  p(point)
end

このように使われていたのでproductメソッドを検索
->検索結果は以下

dish1 = ["チキン", "ポーク", "マトン"]
dish2 = ["パン", "ライス"]
sets = dish1.product(dish2).collect {|set| set.join("+") }
puts sets.join(" ")


-> チキン+パン チキン+ライス ポーク+パン ポーク+ライス マトン+パン マトン+ライス

引数に複数の配列を指定することも可能
->次にcollectメソッドってなに

collectメソッド

要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返す

書き方

array.collect {|item| block }

例(文字列を16進数に直す)

numbers = ["68", "65", "6C", "6C", "6F"]
p numbers.collect {|item| item.to_i(16) }

返り値

[104, 101, 108, 108, 111]

さらに進めて・・・

今度はこのコードがわからない

for point in tx.lazy.flat_map{|x| ty.lazy.map{|y|[x,y]} } 
  p(point)
end

lazyメソッド

->参考
http://melborne.github.io/2012/07/06/enumerable-memo/

よくわからないので、もう少し調べてみようと思う。

制御構造

->if文とかunlessとか

データ構造

->データをコンピュータの中で扱う際にデータを格納する一定の形式のこと

もう少し調べて書くつもり

Gofの振る舞いに関するデザインパターン

詳しく勉強する必要がありそう…

クロージャ

自分を囲むスコープにある変数を参照できる関数
以下が非常に参考になった(JSだとすごいわかりやすい!)
http://qiita.com/takeharu/items/4975031faf6f7baf077a

またさらに進めて・・・

var sum = numbers.filter(isOdd).sum();

->言語すらわからん…

selectメソッド

.select(&method(:odd?))

条件に合う要素を探して集める。ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックの戻り値が真になったときの要素を集め、新しい配列にして返す。
selectメソッド書き方

array.select {|item| block }

じゃあ&method(:odd?)の部分は?
この記事がすごい参考になった!!
http://blog.livedoor.jp/sasata299/archives/51541958.html

injectメソッド

.inject(:+)

http://ref.xaio.jp/ruby/classes/enumerable/inject
こちらを参考
->ようは合計を表すということだった

感想

すごい納得したが、わからないコードがあったので勉強にもなるしよかった。
今回解決できなかった部分とかブロックとかプロックとかそこらへんをしっかり理解したい

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0