記憶の外付けHDD

切実に頭にUSBのコネクターがほしいです。なるべくtype-cでお願いしたいです。(忘れないように、プログラミング学習で学んだことを投稿してます)

2019/10/15_チェリー本(8日目)

はじめに

今日、仕事が急遽夜勤になったんですが、「こ、これだけは…」と思い、ちょっとだけ読みました。

読んだ本

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon

本編

読んだページ数

  • 第4章(P○○〜P○○) ※ kindle版を使ったので、わかんないっす…

新しく知ったこと

inject メソッドとreduceメソッド

  • 配列の各要素に対して処理を行うが、大きな特徴として前の要素に対して行った処理の結果を次の要素の処理に引き継げる
  • reduceメソッドはエイリアスメソッド

number = [ 1, 2, 3 ]
number.inject("加藤") { |result, n| result + n.to_s }

#=> "加藤123"

数列かと思いきや、人名が出来あがりました。

解説

  • ブロックの第1引数には、ブロックの処理の結果が引き継がれる
    • 1回目はinjectメソッドの引数("加藤") が入る
    • 2回目は 1回目の処理の結果("加藤1") が入る
  • ブロックの第2引数は、配列の要素が格納される。

&:

  • ブロック処理は、&:に置き換えることができる。

以下の2つは同じ挙動をする

# 1
["ddt", "sto", "stf"].map{ |ele| ele.upcase }

# 2
["ddt", "sto", "stf"].map(&:upcase)

#=> ["DDT", "STO", "STF"]

解説

&:で書き換えられる条件は以下の通り

  1. ブロック引数が1つだけ
  2. ブロック内のメソッドに引数がない
  3. ブロック内では、メソッドを呼び出すだけ
    (複数の処理を実行できない)
    (演算子はメソッドでないので不可)

あとがき

  • ブログの記載で例を考えるのに時間がかかっているなーと 気付き、例に使い題材を絞ったらいいんじゃないか?と思いました。
    なので、今後は日本史プロレスが多めになると思います

  • DDTの由来って、殺虫剤らしいです。知らなかった… DDT(プロレス技) - wikipedia)

  • 手元にipadしかなかったので、コードはRubyPicoというアプリを使って確認しました。

以上