a5iuoのブログ

システムを運用することが好きな人間のブログです。

書籍を衝動買いし、すぐ網羅思考に陥り、資格学習に没頭し、迷走する自分への備忘録

はじめに

電子書籍で、めっちゃためになる本を読みます。ノートに青ペンで抜き書きします。GoogleのKeepメモに転記します。1週間くらいは読んだ内容を実行します。仕事に忙殺されたり、Twitterやネットサーフィンで、「あれもこれも勉強したほうがよさそう」な情報に流されます。そして、本の"教え"を忘れます。このアンチパターンに陥らないために、ブログに残します。

アウトプット不足の自分へ

※あえて記憶を頼りに書いているので、原文ママではありません。

bunkyosha.com

  • タイムマシンを作るのに漢字はいらない
    →自分にとってのJava・・・?
  • 自分に語らせれば何時間でも続くものをブログにする
    →技術、と言いたいところだけど、ずとまよの音楽のすばらしさ、とかになるかも

  • まず作る、アイデアを形にしたものだけが、企画の推進者になれる
    →いままさに提案のチャンスなので、AWSでデータレイク構築のデモと、コスト見積を提案しよう!

  • ブラックボックスは変数にして、自分の担当分野をさっさと進める
  • モーレツな使命感が湧かないのであれば、目標を変える!集中力を出そうとしている段階で×
    →耳が痛い、すぐ自分の専門分野を伸ばすためにはあれもこれもやらないと病になるので

  • 寝る前に明日やることチェックリストを書け!
  • パラシュートを飛び降りながら組み立てろ!「学ぶ」のではなく「調べる」作るためにつまみ食いする
    →これはRailsとかRubyの習得過程がそうだったな、まず現場のコードを見て、「なんだこのメソッド・・・?」からのリファレンスを調べるの繰り返しで覚えた、あとirbで実験

  • 何となく役に立ちそうで、学ぶな!未来に必要になるまでとっておこう
    →何となく必要そう!で今月10冊ほど本を衝動買いしてしまった・・・

本を読んで終わりになっている自分へ

※あえて記憶を頼りに書いているので、原文ママではありません。

diamond.jp

  • 読書は己の問題解決のため(×:1冊丸々読む、〇:本の内容を実践)
    →経営哲学の本など、筆者の体験談がふんだんに盛り込まれている本は、通読でしか得られない養分があると思う、実践しないと意味無し、はその通り

  • 自分の研究に必要な情報のみPickUp!他は捨てる
    →これが難しい、捨てる技術ですね

  • 解決したい課題を立てる→本を買う→目次を読む→持っている課題のヒントになる箇所を拾う→そこだけ集中して読む→自分のアイデアと紐づけてノート(オンラインが望ましい)に転記→小さく実行する→評価(どれだけ”現実”に変化があったか?無理やりでも数値化)→これをイテレーションする

  • 評価・振り返りが完了するまで、次の本を買わない
    →これが難しい!頑張ります

【Ruby】ぼっち演算子が便利ですね

ぼっち演算子とは

xxx&.yyy

safe navigation operator(通称「ぼっち演算子」)。xxx が nil でないときにメソッドyyyを呼び出す。メソッド呼び出し(super・ブロック付き・yield) を参照。

Rubyで使われる記号の意味(正規表現の複雑な記号は除く) (Ruby 3.3 リファレンスマニュアル)

メソッド呼び出しで `.' の代わりに `&.' を使うことができます。この形式でメソッドを呼びだそうとすると、レシーバが nil の場合は以下のように働きます。

  • 引数の評価が行なわれない
  • メソッド呼び出しが行われない
  • nil を返す

レシーバが nil でない場合は通常のメソッド呼び出しが行われます。

メソッド呼び出し(super・ブロック付き・yield) (Ruby 3.3 リファレンスマニュアル)

irbで確認


irb(main):001:1* class Friend
irb(main):002:1*   attr_accessor :name, :age, :score
irb(main):003:2*   def initialize(name, age, score=nil)
irb(main):004:2*     @name = name
irb(main):005:2*     @age = age
irb(main):006:2*     @score = score
irb(main):007:1*   end
irb(main):008:0> end
=> :initialize

irb(main):009:0> user = Friend.new('Bob', 24, 80)
=> #<friend:0x0000019ec42128e8 age="24," name="Bob" score="80">

# scoreが入力されている時のみ、文言を表示したい
# Railsアプリなら、ビューに書く想定(その際はblank?を使う)

irb(main):010:0> puts "#{user.name}は#{user.score}点です。" if !user.score.nil?
Bobは80点です。
=> nil

irb(main):011:0> user.score = nil
=> nil
# 文言を表示しない、期待通り
irb(main):012:0> puts "#{user.name}は#{user.score}点です。" if !user.score.nil?
=> nil

# userが何らかの理由でnil
# Railsアプリなら、コントローラでuser = User.where(name: 'hoge')のような処理をしていて、ヒットしなかったときなど
irb(main):013:0> user = nil
=> nil

# NilClassのscoreメソッドなんて無いよ!と怒られる
# Railsアプリなら、ビューのレンダリングに失敗する(「画面見れません!」と利用者から怒られる)
irb(main):014:0> puts "#{user.name}は#{user.score}点です。" if !user.score.nil?
(irb):14:in `<main>': undefined method `score' for nil:NilClass (NoMethodError)
        from C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
        from C:/Ruby32-x64/bin/irb:33:in `load'
        from C:/Ruby32-x64/bin/irb:33:in `<main>'
        
# ぼっち演算子で回避
irb(main):015:0> puts "#{user.name}は#{user.score}点です。" if !user&.score.nil?
=> nil

# defined?で回避する手もある
irb(main):016:0> puts "#{user.name}は#{user.score}点です。" if defined?(!user.score.nil?)
=> nil