paru
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # 【第3週】 Ruby本(超入門~チェリー本)輪読会(🅱班) \(2021\-09\-06\~ 2021\-09\-10\) ###### tags: `Ruby` [開催概要](https://hackmd.io/P-vzcmEPQiCHAj_lLjEYJA) [Ruby本\(超入門~チェリー本)輪読会\(🅱班\)ノートまとめ](https://hackmd.io/tioJbHqiT1uu9h0R2rlbhw) ↓超入門のサンプルコード、正誤表はこちらから [サポートページ:ゼロからわかる Ruby 超入門:|技術評論社](https://gihyo.jp/book/2018/978-4-297-10123-7/support) ## 目次 [TOC] ## 2021\-09\-06(月) ### 参加者 - @aim2bpg シモカワ - @haruguchi-yuma - @Maeda8 - @napple29 - @nishitatsu - @paru871 - @pctapitapitapi - @Saki ### 司会 - @nishitatsu ### ドライバー - @pctapitapitapi ### 読んだところ 超入門CHAPTER6 P152 6-3 ハッシュの要素を繰り返し処理する から ### 次回 超入門CHAPTER7 p.161 7-2 メソッドへオブジェクトを渡す から ### 各自の疑問点や気づき、学んだこと - @aim2bpg シモカワ - 多重代入とはこういう状態 ![](https://i.imgur.com/jEUC5PU.png) - メソッド定義のdefとはdefine(定義する)の略。 - メソッド内の戻り値の意識が大事なことを再認識した。 - @haruguchi-yuma - メソッドの戻り値を変数に入れるのは、メソッドの実行が思い処理だったばああい、いちいちメソッド実行せずに済むことだとわかった。あまり意識していなかった。 - ハッシュにmapメソッド呼び出した時の処理が意外だった。多重代入! - @Maeda8 - 多重代入難しい・・・ →全然意識してなかった部分だったので、これが輪読会の凄さか〜と思いました! - defはdefineの略 - @napple29 - ハッシュはeach_key,each_valueでキーだけ、値だけ取り出すことができる - 配列の多重代入は要復習 - @nishitatsu - 多重代入、tap難しい。。。 - @paru871 - `each_key` `each_value`でkeyだけ、valueだけを取り出せることをすっかり忘れていた - メソッドは名前をつけた「処理の部品」 - メソッドを実行することを「呼び出す」という - メソッド定義のdefとはdefineのこと - 配列の多重代入はチェリー本では89ページ(あとで読んでみよう) - 今日のメソッドで学んだキーワード・・・戻り値、レシーバ、tap - @pctapitapitapi - hash.map 配列で変数に渡される(多重代入🤯) ```ruby { a: 2, b: 3 }.map.with_index do |a, i| { key_and_value: a, index: i } end => [{:key_and_value=>[:a, 2], :index=>0}, {:key_and_value=>[:b, 3], :index=>1}] ``` - るりま多重代入 https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#multiassign - 定義する `define` - シモカワさんありがとうございます🙇‍♀️ - メソッド名を実行しても戻り値を使用できるけど、メソッド内の処理が重い時はメソッドを呼び出すたびに処理が走ってしまって負担がかかるので、戻り値を変数に入れて使用すると良いみたい。 - 森塚さんが教えてくれた、イキッた書き方 ```ruby area.tap { |num| puts num } ``` - @Saki - hashにmapを使うと多重代入になる(ここはややこしいところ) むずかしい...!あとで読み解く ```ruby irb(main):063:1* { a: 2, b: 3 }.map.with_index do |a, i| irb(main):064:1* { key_and_value: a, index: i } irb(main):065:0> end => [{:key_and_value=>[:a, 2], :index=>0}, {:key_and_value=>[:b, 3], :index=>1}] irb(main):066:1* { a: 2, b: 3 }.map.with_index do |a, b, i| irb(main):067:1* { key_and_value: a, index: i } irb(main):068:0> end => [{:key_and_value=>[:a, 2], :index=>nil}, {:key_and_value=>[:b, 3], :index=>nil}] irb(main):069:1* { a: 2, b: 3 }.map.with_index do |a, b, i| irb(main):070:1* { key: a, value: b, index: i } irb(main):071:0> end => [{:key=>[:a, 2], :value=>0, :index=>nil}, {:key=>[:b, 3], :value=>1, :index=>nil}] irb(main):072:1* { a: 2, b: 3 }.map.with_index do |(a, b), i| irb(main):073:1* { key: a, value: b, index: i } irb(main):074:0> end => [{:key=>:a, :value=>2, :index=>0}, {:key=>:b, :value=>3, :index=>1}] ``` - 多重代入のはチェリー本にのってる! - `control + l`でコマンドラインを一番上に! - 複数のオブジェクトを返したいときは、 たとえば配列に入れて1つにまとめる ![](https://i.imgur.com/5Ce7YG4.png) - メソッド`area`を変数`result`に入れると、結果を使ってさらに別の計算をしたり、いろんな用途に使えるようになる - tapはなれると便利! ![](https://i.imgur.com/MwB0LF7.png) ### 本日の振り返り(よかった点・次回に向けての改善点等) - @aim2bpg シモカワ - メソッドの戻り値の意識が大事なことを学んだのでこれからプログラム作るときには特に忘れないようにしたい。 - 内容が難しくなるにつれて、アドバイザーさんの助け舟が心強く感じています🙇🏻‍♂️ - にしたつさんのナイスリード、ぺろさんドライバーありがとうございました! - @haruguchi-yuma - 今日は意外なところから、深い話になって難しかったです。 - @Maeda8 - 輪読会初参加でした! 雰囲気とても良かったです!! Siriみたいなやつ面白かったです笑 みなさんこれからよろしくお願いします! - @ぺろ 前田さん輪読会参加したいって分報でおっしゃっていたので気になっていたのですが、参加できるようになってよかったです😄 - @napple29 - 戻り値、まだ理解がふんわりなのでもうちょっと進んだらたくさん質問してしまうと思います😢 - @nishitatsu - 司会、時間を見ておくの、忘れそうになりますね😅 - @paru871 - 今日は学びが深かった!上級者になった気分です。 - 皆さんから出た質問のおかげでどんどん学びが深くなっていって素晴らしいと思った! - にしたつさんの司会がとってもスムーズでベテランっぽくて安心して参加させていただきました。 - ぺろさんのドライバー、スムーズでよくわかりました。打鍵音がプロっぽくてかっこいい!! - sakiさんのSiriも参加してくれてにぎやかで楽しかったー。 - 森塚さんのアドバイスと知識、本当にありがたいです。ありがとうございます! - @pctapitapitapi - 私のirb、インデントしてくれへんくなった。。。😓バージョンをアップデートしたら良いんかな。。。?? - 2.7以上ならインデントしてくれると思います! haruguchi - ありがとうございます! - SakiさんのSiriみたいなやつ、誰。。。??となった笑 - @Saki - hashに入ってから一気に難しくなった。。mapで回し時の中の処理がよくわかってないのであよで読み解いてみます...! - ls,wcコマンドをやってた当時、メソッドの戻り値のことをよくわかっていなかったんだな〜と痛感 - 好奇心でhashにmapを使ったら難しい話に。。。 - Siri?が突然起動してこわかった...みなさん大きい音で驚かせてしまってごめんなさい🙏 - 森塚さんありがとうございます!! ----- ## 2021\-09\-07(火) ### 参加者 - @aim2bpg シモカワ - @haruguchi-yuma - @Maeda8 - @napple29 - @nishitatsu - @paru871 - @pctapitapitapi - @Saki ### 司会 - @haruguchi-yuma ### ドライバー - @aim2bpg シモカワ ### 読んだところ 超入門CHAPTER7 p.161 7-2 メソッドへオブジェクトを渡す から ### 次回 p.171 キーワード引数でのデフォルト値 から ### 各自の疑問点や気づき、学んだこと - @aim2bpg シモカワ - メソッドの戻り値がメソッドの場合、シンボルで返ってくるのが不思議だと思った。 - @haruguchi-yuma - 困ってググったらたいてい伊藤さん! - メソッドの中で`puts`したら戻り値が`nil`なのは気をつけたい。 - キーワード引数を定義したら、hashで呼び出せることがわかった。 - キーワード引数は何を引数にするのかを丁寧に教えてくれていて親切だなぁと思った。 - @Maeda8 - irbでメソッド名のtab補完できることを知りました。 - メソッド定義後にシンボルが返ってくるのは意識したことなかった。。 - キーワード引数使ったことないかも。シンボルとごっちゃになっている感がある。。。 →伊藤さんの記事があった [Rubyのキーワード引数はシンボルっぽく定義するけど、シンボルそのものではない、という話 - Qiita](https://qiita.com/jnchito/items/74e0930c54df90f9704c) - @napple29 - メソッドの引数でキーワード引数を使える(順不同でも可)ただコードが長くなる - returnにも戻り値置くことができる - キーワード引数のところはせっかくなのでチェリー本読んでみようと思います - @nishitatsu - キーワード引数は、難しく考えない!!! 目から鱗の結論でした。😄 - @paru871 - メソッドの()は省略可能 - irbの入力はtabで補完してくれる - irbでメソッドを書いた後の戻り値がメソッド名のシンボルになる意味を調べる - 引数を省略したときのデフォルト値、実際に目にすると迷いやすいので覚えておきたい - @pctapitapitapi - キーワード引数はシンボルとしても書けるよってことがwakatta - @Saki - メソッドの最後の実行結果が戻り値として返る →putsは2つとも返ってくるのはなぜ?"こちらレシートになります"だけ返ってくるのかと思ってた →putsだから戻り値自体は`nil` - **通帳に記帳はしてるけど、お金(戻り値)は出てこないイメージ**→nishitatsuさんわかりやすい!ありがとうございます!! - メソッド定義をirbですると、`:メソッド名`とsymbolが返ってくる→これはなんだろう?(宿題) - デフォルト引数あんまり使ったことないけど、if式を使わずにスマートなコードがかけそう - キーワード引数、引数が3つ以上になったらもう使ったほうが良さそう。これを指定しないとメソッドの定義コードと呼び出してるコードを見比べなきゃいけなくて読みづらそう。Rubyの課題では使わなかったけど、Sinatraで使った記憶。 - キーワード引数を定義したら、hashで呼び出せる! - [Rubyのキーワード引数はシンボルっぽく定義するけど、シンボルそのものではない、という話 \- Qiita](https://qiita.com/jnchito/items/74e0930c54df90f9704c#202057-%E8%BF%BD%E8%A8%98%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E5%81%B4%E3%81%AF%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%81%AA%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%81%98%E3%82%83%E3%81%AA%E3%81%84%E3%81%AE) > 定義したときの引数はシンボルではない。呼び出したときの引数はシンボル。 →もし定義したときに書いたキーワード引数がシンボルなら(実際はシンボルではない)、中身のコードでキーワード引数を書くときもシンボルで書かないといけない。しかし実際はシンボルで書いていないので、「やっぱりこのキーワード引数はシンボルっぽく書けるだけであってシンボルではないんだな」と覚えることにしました ### 本日の振り返り(よかった点・次回に向けての改善点等) - @aim2bpg シモカワ - ドライバー2回目、楽して前のコードを流用しようとして間違えてばっかりでした〜。やっぱ、付け焼き刃はいかんですね。😅 - 難しいところなはずなのに、読んでみると意外にスッと入ってくるので超入門はやっぱりわかりやすいんだと再認識。8章クラスに入るとやばそうです。 - @haruguchi-yuma - 徐々に難しくなってきた、シモカワさん色々試してくださってありがとうございます。 - わからないことをわからないと言える雰囲気大事ですね! - @Maeda8 - irbでメソッド定義後にシンボルが返ってくるのは気になる! - キーワード引数のところ、haruguchiさんやparuさんが説明してくださったけど、きちんと理解できなかった・・・🥲 - いつでも大声で「わかりませーん!」ってご遠慮無く!発言してくださーい!(PARU) - ありがとうございます!!😄 →そもそもシンボルとかハッシュとか何が何だかわからなくなってきました。復習します! - @napple29 - 通帳に記帳してお金が出てくる、出てこないの考え方とてもわかりやすかったです💫(pとputs) - railsで最初から定義されているコードがわからなくて困ることが多いので、ここで基礎をしっかり身につけたいです - キーワード引数はとりあえず普通に書きます👶🏻 - @nishitatsu - だんだん難しくなってきたので、疑問がわいたら反射的に「分からん!!」と言いたい。 - @paru871 - 伊藤さんはいつも先回りして私達に必要な記事を書いていてくれるのが毎回本当にすごいと思う! - キーワード引数、今取り組んでいるオブジェクト指向を身につける上で不可欠な知識なので今日のうちにもう一度読み込んでおきたい。 - @pctapitapitapi - コンマ`,`という名前がいつも飛ぶ🤔 - これは`:`コロン - ↑合ってます😄(paru) - え??みんなお金と通帳の話してるけど記憶にない🤔寝てた?? - `puts`は通帳記入してお金は出てこない - `p`は通帳記入してお金も出てくる - メソッドとかはお金だけ出てくる - にしたつさんありがとうございます! - @Saki - JavaScriptは関数(Rubyでいうメソッド)に引数を渡さない場合も()を書かないといけないので、Rubyは書きやすい~ - コードが長いと沈黙の時間が長くなってドライバーさんがプレッシャーに感じるかもなので、プレッシャーを感じにくいようにしていきたい - 読んでるとき途中止まってしまったりボーッとして読みはじめなかったりしてすみませんでした🙏💦 - @ぺろ お気になさらず!お疲れ様ですね☺️ - @Saki ありがとうございます〜😭✨ ----- ## 2021\-09\-08(水) ### 参加者 - @aim2bpg シモカワ - @haruguchi-yuma - @Maeda8 - @napple29 はるな - @nishitatsu - @paru871 パル - @pctapitapitapi ぺろ - @Saki ### 司会 - @Saki ### ドライバー - @paru871 ### 読んだところ 超入門CHAPTER7 p.171 キーワード引数でのデフォルト値 から ### 次回 超入門CHAPTER8 p.182 クラスを作る ### 森塚さんに教えていただいたエラーメッセージ例 ```ruby= def foo puts bar(1) end def bar puts 2 end foo ``` エラーメッセージ ``` % ruby class5.rb class5.rb:5:in `bar': wrong number of arguments (given 1, expected 0) (ArgumentError) from class5.rb:2:in `foo' from class5.rb:9:in `<main>' ``` ### 各自の疑問点や気づき、学んだこと - @aim2bpg シモカワ - インスタンス変数だとメソッドの外から見えてしまうので使い方に注意が必要と感じた。 - 引数エラーのメッセージに引数の期待値(Default引数も考慮)が出てくるの知らなかった。😲 - メソッドの呼び出し履歴の見方もバージョンで違うので注意。 - @haruguchi-yuma - エラーと仲良くなろうの会でした! - Rubyのバージョン毎の仕様の変遷もざっくりとは理解しといたほうがいいんだなとわかりました。 - @Maeda8 - インスタンス変数→メソッド同士で値を渡せる ```rb @text = "こんにちは" def hello p @text = "こんばんは" end def hello2 p @text end p @text #=> こんにちは hello #=> こんばんは hello2 #=> こんばんは p @text #=> こんばんは ``` helloメソッドで@textに"こんばんは"が代入されている。 - `new(size = 0, val = nil) -> Array` リファレンスマニュアルの読み方 →sizeがデフォルト引数で0になっていて、valueがデフォルト引数でnilになっている。 - @napple29 -  キーワード引数もデフォルト値を設定できる - 変数の寿命(スコープ)は、メソッドの内外で分かれる - インスタンス変数はメソッド内外関係なく生きていられる - @nishitatsu - newメソッド、ArrayクラスとStringクラスは、空箱持ってくる。Integerクラスには、newメソッド無い。 - そういえば、ブロック使えば、違う数字の配列作るのに便利な時があります。`Array.new(10){[1,2,3,4,5].sample}`みたいな感じ。 - @paru871 - ローカル変数とスコープがいつも引っかかってしまい、迷路に入りがちなのでコードを書く段階からスコープの見える範囲と寿命を意識していきたい - クラスでオブジェクトを作る際に使うnewになかなか慣れない - integerクラスにはnewメソッドはない! - @pctapitapitapi - 配列の作り方`#new(size = 0, val = nil) -> Array` - 要素の中身が違う配列は作れない ```ruby Array.new(2, "モカ", "カフェラテ") => ArgumentError ``` - @Saki - インスタンス変数をクラスの外で書いたことがなかったので、勉強になった! - インスタンス変数だとメソッドの中で定義したのを外から呼び出せる - ローカル変数はできない - > (このインスタンス変数は結構特殊なインスタンス変数で main というインスタンスのインスタンス変数ですね :smiley: ) - [object main \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/class/main.html) - エラーの読み方 - versionによってエラーの順番表示がちがう - [Ruby 3\.0で発生する「プロを目指す人のためのRuby入門」との差異について \- Qiita](https://qiita.com/jnchito/items/18ac338c2a4570301dd7#%E3%83%90%E3%83%83%E3%82%AF%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%81%AE%E8%A1%A8%E7%A4%BA%E9%A0%86%E3%81%8C%E5%85%83%E3%81%AB%E6%88%BB%E3%81%A3%E3%81%9F92111%E7%AB%A0%E6%9C%AC%E6%9B%B8%E5%85%A8%E8%88%AC)バックトレース ![](https://i.imgur.com/JthKETG.png) ### 本日の振り返り(よかった点・次回に向けての改善点等) - @aim2bpg シモカワ - 今日も超入門からプラスアルファの知見が得られました。ありがとうございます。 - paruさんが事前にドライバー準備していただいたおかげで色々試行することができました。ありがとうございます。 - 読み手が同じ方が続いてそうなので、次回は当たりますように(!youを待ってる間のドキドキ感もあります)。 - sakiさんマイクのボリューム調整のご協力ありがとうございました。おかげで程よい音声で聴けるようになりました🙏 - @haruguchi-yuma - 初めてlsコマンドのプラクティスをやったとき(当時はOOP)スコープが理解できずにQ&Aを投げた気がしました。 - https://bootcamp.fjord.jp/questions/353 - ↑高橋さんの解説がわかりやすくて助かりました - @Maeda8 - haruguchiさんのスコープ講座とリファレンスマニュアルの読み方ためになりました!!ありがとうございます😄 - paruさん事前準備、ありがとうございます...!!! - 超入門たくさん勉強する場所がある。輪読会すごい。(一人で読んでいたら気づかないところ多い) - バックトレースのところ理解できていないので、復習しておきます!!😇😇 - @napple29 - エラーメッセージのバックトレースがwakaranかったので今後は読めそう!(今まで一番上しか読んでなかったです) - インスタンス変数のスコープ講座とてもわかりやすかったです☺️ - まとめ無いです発言すみません、、🙏🏻 - サンプルコードいいですね!paruさんありがとうございます🎉 - ターミナルとコード一緒に表示できるようにしておきます! - @nishitatsu - 今日はギリギリ大丈夫な範囲でした。😅 - @paru871 - 新しい試みでドライバーをやってみましたが、今後もみんなの実力アップに役立つ方法を試行錯誤しながら柔軟にやっていけたらと思います。 - 私はそろそろもう大丈夫ではなくなってきました😅 - @pctapitapitapi - はるぐち先生のインスタンスメソッド講座めっちゃわかりやすかった!ありがてぇ〜🙏(前田さんのコメント参照) - パルさんが今日輪読する予定のコードを事前にファイルで用意してくださっていてめちゃくちゃスムーズに輪読会が進んだ。。。感謝すぎる。。。!!🙇‍♀️ - 今日も森塚さんの神アドバイスありがとうございます!(パルさんのコメント参照) - どこから分からなくなるか怖い😇震えながら読んでる - @Saki - スコープすぐわからなくなるので、書くたびに調べている... - @paru さん事前に準備してくださってとても助かります...ありがとうございます🙏事前にサンプルコードを用意しておくのいいですね! - 森塚さんのエラーの読み方講座とてもわかりやすかったです!ありがとうございます。バックトレースよくわからなくて一番上しか読んでなかったのでちゃんと読もうと思います! ----- ## 2021\-09\-09(木) ### 参加者 - @aim2bpg シモカワ - @haruguchi-yuma - @Maeda8 - @napple29 はるな - @nishitatsu - @paru871 パル - @pctapitapitapi ぺろ - @Saki ### 司会 - @Maeda8 ### ドライバー - @haruguchi-yuma (途中交代) - @paru871 パル ### 読んだところ 超入門CHAPTER8 p.182 8-2 クラスを作る から ### 次回 p.190 8-3 クラスに引数を受け取るメソッドを定義する から ### 森塚さん講義 ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:tap) ``` ``` 8-3 % ruby drink_methods.rb #<Method: Drink(Kernel)#tap() <internal:kernel>:89> ``` ----- ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name).source_location ``` ``` 8-3 % ruby drink_methods.rb ["drink_methods.rb", 2] ``` ----- ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name) ``` ``` 8-3 % ruby drink_methods.rb #<Method: Drink#name() drink_methods.rb:2> ``` ----- ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name).owner ``` ``` 8-3 % ruby drink_methods.rb Drink ``` ----- ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name).receiver ``` ``` 8-3 % ruby drink_methods.rb #<Drink:0x00007f87bd866090> ``` ----- ```ruby= class Drink def name(a, b = 1, c:2) "カフェラテ" end end drink = Drink.new p drink.method(:name).parameters ``` ``` 8-3 % ruby drink_methods.rb [[:req, :a], [:opt, :b], [:key, :c]] ``` ----- ```ruby= class Drink def name(a, b = 1) "カフェラテ" end end drink = Drink.new p drink.method(:name).parameters ``` ``` 8-3 % ruby drink_methods.rb [[:req, :a], [:opt, :b]] ``` ----- ```ruby= class Drink def name(a, b = 1, c:) "カフェラテ" end end drink = Drink.new p drink.method(:name).parameters ``` ``` 8-3 % ruby drink_methods.rb [[:req, :a], [:opt, :b], [:keyreq, :c]] ``` ----- ```ruby= class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name).parameters p drink.name ``` ``` 8-3 % ruby drink_methods.rb [] "カフェラテ" ``` ----- ### 各自の疑問点や気づき、学んだこと - @aim2bpg シモカワ -  methodメソッドで色々な情報を取得できることを知った。メソッドなし、owners、receiver、parameters [class Method \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/3.0.0/class/Method.html#I_PARAMETERS)  ![](https://i.imgur.com/LzVbdBE.png) - メソッド実行後の戻り値の型を意識付けること。 - @haruguchi-yuma - メソッドというメソッドがあるのを初めて知った。 - クラスにはメソッドを定義できる。methosで定義したメソッド一覧が得られる。 - 自分のクラスで定義していないけど、一覧に乗ってる定義はどっかで定義されている。 - @Maeda8 ```rb class Drink def name "カフェラテ" end end drink = Drink.new p drink.method(:name).parameters.class #=> Array p drink.method(:name).class #=> Method p drink.name.class #=> String p drink.class #=> Drink ``` →戻り値によって型が変わる。 - @napple29 はるな - ` .source_location`でメソッド定義の位置を知ることができる - `.owner` - 戻り値のデータ型が本当に大事 - @nishitatsu - `.owner`,`.source_location`,`.parameters`ありがとうございます。メモっときます!!! - @paru871 パル - クラスと定数はキャメルケース、変数はスネークケース - メソッドの戻り値の型が何になるのかを常に意識すること - @pctapitapitapi ぺろ - クラス.newで作ったのはガレージみたいな感じで、@nameとかが車みたいに働く入れ物 - というにしたつさんの説明から得たイメージ - @Saki - クラスの挙動はわかってきたけれど、いざ自分で書こうとすると難しい😇 - classクラス...混乱する。classを自分で定義したら`class`クラス。定義した瞬間から、Moduleから継承した[class Class \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/class/Class.html)にのってるメソッドが使えるようになっている。 - 森塚さんに教えていただいた便利メソッド! - `drink.method(:name).source_location`で、nameメソッドを定義した場所がわかる!(drinkはDrinkクラスのインスタンス) - `drink.method(:name).owner`でdrinkが度のクラスで定義されたかわかる - `drink.method(:name).receiver`でレシーバの中身がわかる - methodオブジェクト聞き慣れない...[class Method \(Ruby 3\.0\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/3.0.0/class/Method.html#I_PARAMETERS) - **メソッドを読んだらどんな型が返ってくるかに注目すべし。戻り値の型によって属するクラスも変わる=使えるメソッドも変わってくる** - `drink`の戻り値は`Drink`クラス - `drink.method(:name)`の戻り値は`Method`クラス - `d`rink.method(:name).parameters`の戻り値は`[]`なのでArrayクラス - →メソッドをどんどん使っていくと誰が何を呼び出してるかわからなくなるので、1個1個レシーバとメソッドを確認しながら書こうと思った! ### 本日の振り返り(よかった点・次回に向けての改善点等) - @aim2bpg シモカワ - 今、ちょうど自作lsコマンドでクラスを扱っているのでリアルタイムな話題で理解が深まっている気がする。教科書にない話も点と点がつながる感じがしている。 - maedaさん、初司会おつかれさまでしたー - @haruguchi-yuma - 途中動かなくなってすみませんでした、、、 - 大丈夫です!戻ってきてくださってよかったー😄いつでもカバーします!ヘッポコですけど😅(paru) - @Maeda8 - 戻り値によって型が変わるというのを意識したのは初めてでした。 - 司会初めてでした!もっと上手く出来るように皆さんの司会を見ながら学んでいこうと思います! - @皆さん 司会ありがとうございましたという言葉、ありがとうございます🙇‍♂️ - @napple29 はるな - Maedaさん司会ありがとうございました! - 今まで全く使いこなせてなかったですが、クラスを作ってメソッド定義して呼び出すところまではできそうです - 私はこの後のinitializeメソッドがわからないので教えていただきたいです😇 - @nishitatsu - ついにクラスの難しいところに来てしまった。分かったような気になって、使えないことが多いので、皆さんよろしくお願いします。😅 - @paru871 パル - 難しくなってきましたが、わからないところはしっかり質問して理解しながら進んでいきたいと思いました。 - 森塚さんの講義は本当にありがたいです。ドライバーの私が経験不足で本当に申し訳ないです🙏 - まえださんの司会、とってもスムーズでリーダーシップが感じられて安心しました。 - にしたつさんの例え話はいつもわかりやすい!イメージしやすい! - @pctapitapitapi ぺろ - ちょっと難しくなってフリーズした😇難しいと思考停止しがちで質問も出てこないから悲しい - 前田さん初司会ありがとうございます!関西弁が親しみやすくて良い☺️ - 今日の森塚さん講座もありがたかった🙏 - @Saki - シモカワさんお気遣いくださってありがとうございました! - 🙏とんでもないです〜 シモカワ - Maedaさん初の司会ありがとうございました! - 森塚さん、いつも課題の本には載ってない知見を教えてくださってありがとうございます! ----- ## 2021\-09\-10(金) ### 参加者 - @aim2bpg シモカワ - @haruguchi-yuma - @Maeda8 - @napple29 はるな - @nishitatsu - @paru871 パル - @pctapitapitapi ぺろ - @Saki ### 司会 - @nishitatsu ### ドライバー - @napple29 はるな ### 読んだところ 超入門CHAPTER8 p.190 8-3 クラスに引数を受け取るメソッドを定義する から ### 次回 超入門CHAPTER8 p.195 8-4 インスタンス変数はオブジェクトごとに存在する から ### 各自の疑問点や気づき、学んだこと - @aim2bpg シモカワ - lsコマンドを作るでself使ってみてるが、p selfでレシーバが調べられることは知らなかった。selfの使い所がわからない時に今度使ってみようと思った。 - メソッドの分け方は一つ一つの仕事をきちんと果たせるくらいの粒度で分ける。 - インスタンス変数は多用する設計が破綻するということを改めて再認識させていただいた。 - [改訂版・(あなたの周りでも見かけるかもしれない)インスタンス変数の間違った使い方 \- Qiita](https://qiita.com/jnchito/items/4d62693525f5023013cc) - @haruguchi-yuma - selfは呼び出す場所によって違う。 - クラスのメソッドの中だと、呼び出したインスタンス(レシーバ)自身 - 変わりにくいデータはインスタンス変数にしてもいい。 - コロコロ変わるデータはメソッドで渡していった方が危険が少ない - @Maeda8 - 下のコードではselfはDrinkクラスのオブジェクトを表す。 ```rb class Drink def name "モカ" + topping end def topping "エスプレッソショット" end end drink = Drink.new puts drink.name #=> モカエスプレッソショット ``` ```rb class Drink def name "モカ" + self.topping end def topping "エスプレッソショット" end end drink = Drink.new puts drink.name #=> モカエスプレッソショット ``` - インスタンス変数を使う場合と使わない(ローカル変数だけ)場合 ```rb class Drink def order(item) puts "#{item}をください" @name = item end def reorder puts "#{@name}をもう1杯ください" end end drink = Drink.new drink.order("カフェラテ") drink.reorder #=> カフェラテをください #=> カフェラテをもう1杯ください ``` ```rb class Drink def order(item) puts "#{item}をください" name = item reorder(name) end def reorder(name) puts "#{name}をもう1杯ください" end end drink = Drink.new drink.order("カフェラテ") #=> カフェラテをください #=> カフェラテをもう1杯ください ``` - @napple29 はるな - メソッド名と関係ない動きをするような定義をしてはいけない - クラス内でメソッドを呼び出すときはレシーバを省略できる - @nishitatsu - IDと識別番号は違う。 - 単一責任の原則。覚えました!!!ありがとうございます!!! - @paru871 パル - ローカル変数より広いスコープを持つ「インスタンス変数」 - インスタンス変数の寿命・・・それを持つオブジェクトの寿命と同じになる - ガベージコレクション・・・役目が終わったら寿命終わり・・・調べてみる - 依存性をなくすことが大切 - メソッドの分け方の粒度は、メソッド名とメソッド内の処理が合っているかどうか - @pctapitapitapi ぺろ - メソッド同士依存し過ぎては良くない。メソッドの中で引数付きでメソッド呼び出して次のメソッドを実行して...みたいなことが続くのは良くない。それならインスタンス変数使うとか、デフォルト引数を設定するとかしよう。 ```ruby # デフォルト引数設定 def order(item, require_order: false) ``` - @Saki ### 本日の振り返り(よかった点・次回に向けての改善点等) - @aim2bpg シモカワ - クラスの章に入ってだんだん難しくなってきた。超入門に書いてある内容は理解できるが、なぜそうなるのかを深堀りしていくとまだまだわからないことが多いと感じた。その辺はチェリー本の輪読会で理解を深めていきたい。 - 今週もおつかれさまでした〜。来週も難しいところ続きますが、皆さんで乗り越えていきましょう💪 - @haruguchi-yuma - クラス定義中のメソッドの中でメソッドを呼ぶと変数なのかメソッドなのかわからなくなって読めない!みたいなことがありました。 - 一週間があっという間でした。来週も引き続きクラスなので頑張っていきたい! - @Maeda8 - self恐怖症なので、少しselfのことをしれて良かった。使えるようになりたいです。 - データの内容が不変のものはインスタンス変数に入れて良いということを学べた。 - だんだん難しくなってきた🥲 - ペロさんの質問のおかげで色々勉強できています、ありがとうございます!! - @ぺろ こちらこそ!お付き合い頂きありがとうございます🙇‍♀️ - @napple29 はるな - インスタンス変数使いこなしたい… - 優しくドライバーをサポートしてくださりありがとうございます👶🏻 - 超スムーズ!画面もきれいでみやすかったです。ありがとうございました(paru) - @nishitatsu - そろそろ`name`が出始めたので、要注意! - 日曜にワクチン接種2回目なので、来週頭出れないかも、、、 - お大事に! - 無理せずにゆっくり過ごしてくださいねー! - @paru871 パル - インスタンス変数を上手に使えるようになりたい! - self少しわかるようになった。 - 伊藤さんのインスタンス変数の記事を再度読んで理解を深めておきたいと思います。 - ぺろさんのプログラム読みくだしがとてもわかりやすく、勉強になってありがたいです。 - そう言っていただけると助かります😂ありがとうございます! - @pctapitapitapi ぺろ - 質問し放題でめちゃくちゃありがたい🙇‍♀️ - 今lsコマンドで悩んでいる所に使えないかどうか、めちゃくちゃ考えながら輪読会参加してる😇 - @Saki - Drink.newで作られたオブジェクトがインスタンス変数@nameの持ち主で、このオブジェクトが存在する間は@nameも存在して使える→これがガベージコレクションか! - haruguchiさんのインスタンス変数を使わない場合のreorderメソッドの例がわかりやすかったです! ![](https://i.imgur.com/7NRZgVm.png) →これが依存性が強い状態なのか。なるほど。 - メソッドは原則、単一責任 - かといってなんでもインスタンス変数に突っ込むのも良くない→[改訂版・(あなたの周りでも見かけるかもしれない)インスタンス変数の間違った使い方 \- Qiita](https://qiita.com/jnchito/items/4d62693525f5023013cc)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully