はぜにっき

日記です。(毎日更新ではない)

「プロを目指す人のためのRuby入門」読んだ

はぜです. 「プロを目指す人のためのRuby入門」という本を読んだ.

 Rails, 「めっちゃ高速にWebサービスを作りまくれる未知のWebフレームワーク」という認識しかなかったものの, 興味は結構あった.
ここ数年, Twitterとかで超高速で作りまくる人たちは大体GAEかRailsな気がする(観測範囲は狭い)

元々RubyとかRailsには興味はあって, 俺も高速にバンバン作れるようになってハッカソンで一山当てたいという気持ちも湧いてきたのでやるか〜〜〜〜となりました.
いやまあ最近Node.jsとかは触ってるけど結局俺何ができるんだろうという感じになって, ちゃんとWeb技術を勉強する上で抑えておかないとなあ という思いが強い. それ以上に意味は特にないです.

 Rubyそのものは去年にたのしいRubyの第4版を読んで, 仕事でChefを触り始めたこともあって雰囲気ではあるけど触ってはいました.
で, Railsを触るとかそれ以前に「ちゃんと言語のことは最低限理解してからフレームワーク触ろう」ということもあって, ひとまず題名の本を買ったという流れです.

その辺やるのと一緒にフロントエンドも多少は触れるようになりたいね という気持ちもあります.

hazediary.hateblo.jp

 

買う本はAmazonでレビュー読んだり本の概要とかを読んで決めた.
最高にわかりやすい+他の入門書には書いてなさそうな感じの説明が多くて良かった.

本がでかい+内容が詰まってる+実際に写経したりとか丁寧めにやってた こともあって想定以上に時間掛かった. 大体1週間半ぐらい?そんなもんか


個人的に面白いなーって思ったところとか, 知らなかったところを適当にメモしておく.

return あんまり使わない

  • まだ慣れない
  • 理屈はわかる

暗黙的な型変換が無い

  • 型推論ではあるけど, 変換はない
  • 1 + '10' が死ぬ
  • めっちゃ良いと思う

引数のデフォルト設定

  • def method(str = 'default', nums = 0 ) みたいな感じ
  • 引数を指定せずに呼び出したらデフォルトの設定が適用される
  • 便利っぽい

メソッド名の ! とか ? とか

  • ? == 他言語でいう is***
  • ! ... 注意事項有
  • わかりやすくて良い

インクリメントとデクリメントが無い

  • なんで?
  • まあメソッドの機能でカウンタみたいなの付いてくること多いし使い道少なさそうだし別に問題ない気がするな

Minitest

  • 便利
  • この本のTDDの導入説明めっちゃ良いと思う
  • テスト駆動開発も読もうと思った

配列周り

  • メソッド多すぎ
  • * ポインタみたいなやつ結構わかりやすいと思うのはCやってたからだろうか
  • 可変長引数作るの便利 def method(a, b, *c)

ループ周り

  • メソッド多すぎ
  • 使って覚えていく感ある
  • さらーっとメソッド一覧みたいなのを一回読んでおいて, 都度調べ直すみたいな感じで最初は良さそう. 暗記するようなものでもないし

inject

  • 畳み込み演算のやつ
  • 競プロで似たようなのを見た気がするけどこういうの慣れるまで時間かかりそう(苦手)

Range

  • 1..3 : 1~3
  • 1...3 : 1~2
  • これ絶対いつか間違える

SymbolとStringの使い分け

  • シンボルは内部的には整数値で管理されてるらしい. 大体納得した
  • =同一の値のシンボルは同一オブジェクト
  • 破壊的な変更ができない

#### キーワード引数

  • def method( str, isNum: false, keyword1: 'keyword' } ...
  • 良さそう

正規表現

  • 半分ぐらいperlと同じ
  • & 使った表記は大体書き換えができるようになっていて最高. 黒魔術みたいなのは書きたくないし見たくないんや

Object-Oriented周り

  • attr_**** 便利
  • className.methodNamemethodName が何を表しているかを瞬時にまだ把握できないのでやっていくしかない
  • 自動で色々メソッドが定義してくれるのは有難いんだけど大規模になればなるほど混乱しそう
  • 慣れ

  • protected 公開レベル大事

freeze

  • const とか final とかの代わりみたいな
  • 最初から固定じゃなくて, ある段階の処理をしたら固定させられるのは便利

クラス変数

  • @@name みたいに定義
  • クラスメソッド/インスタンスメソッド/スーパ.サブクラスで共有される変数
  • config値で使う. 便利

undef

  • メソッドを消せる
  • いつ使うんこれ

module

  • extend めっちゃ便利

::.

  • ドットは右辺がメソッドのみ
  • ::名前空間区切ったり定数の時に使うのが一般的
  • 慣れたら良さそう

例外処理

  • retry と 修飾子の rescue 便利だなーって思った

yield / Proc

  • つよい
  • 無名関数を定義したり投げ合うみたいな感覚で覚えてしまったけど多分大丈夫
  • ブロックの認識をまだちゃんとし切れてない気がする. 慣れたい

&:

  • 右辺のシンボルに対して to_proc メソッドを呼び出してProcオブジェクトにして左辺に返す
  • 左辺のメソッドがそれを受け取って内部で .call とか使って処理する

  • なにこの...なにこれ...

tap

  • メソッドチェーンの途中に入れて値を出力させたりできる
  • 便利

半分ぐらい便利としか言ってない.
全部を正しく理解できた気がしないので, 来月あたりにまたさらっと読み直してみようかなあと思った.
分かりやすいし内部のことも意識させるような書き方をしていて良かった. 自分もこういう説明できるようになりたいし中のコード読んだりしていきたい


次はこの本をやります

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング

おわり