rails tutorial 第4章


はじめに

独学でrails tutorialを進めていく過程を投稿していきます。

進めていく上でわからなかった単語、詰まったエラーなどに触れています。

個人の学習のアウトプットなので間違いなどあればご指摘ください。

初めての投稿なので読みにくいところも多々あるかと思いますがご容赦ください。

第4章 Rails風味のRuby

4.2.3 メソッドの定義

演習3
palindrome_tester("racecar")に対してnil?メソッドを呼び出し、戻り値がnilであるかどうかを確認してみてください(つまりnil?を呼び出した結果がtrueであることを確認してください)。このメソッドチェーンは、nil?メソッドがリスト 4.10の戻り値を受け取り、その結果を返しているという意味になります。(rails tutorial第4章より引用)

演習の通り動作確認はできました。しかし、一つ疑問が生まれました。

Q..何で文字列が返っているのに戻り値はnilなんだろう

#palindrome_testerメソッド
def palindrome_tester(s)
  if s == s.reverse
    puts "It's a palindrome!"
  else
    puts "It's not a palindrome."
  end
end

設定したpalindrome_testerは文字列を返すメソッドのはず、、、

A..putsの戻り値はnilだから。
putsの戻り値はnilなのでpalindrome_tester("racecar")に対してnil?メソッドを呼び出すとtureが返ってくる。
(表示された文字列はあくまでputsの副作用であり戻り値ではない)←ここが理解できていなかったようです。すっきりしました。

4.3.2 ブロック

演習4
リスト 4.12の「?」の部分を、それぞれ適切なメソッドに置き換えてみてください。ヒント:split、shuffle、joinメソッドを組み合わせると、メソッドに渡された文字列(引数)をシャッフルさせることができます。

#リスト 4.12: 文字列をシャッフルするメソッド 
>> def string_shuffle(s)
>>   s.?('').?.?
>> end
>> string_shuffle("foobar")
=> "oobfra"

(rails tutorial第4章より引用)

答えは

def string_shuffle(s)
  s.split('').shuffle.join
end

でした。
ここでまた疑問が生まれました。

Q..s.split('')って?

A..splitメソッドは引数に('')(空白の文字列)を指定する事で一文字ごとに分割した配列を返す。
参考https://rakuda3desu.net/rakudas-rails-tutorial4-3/

そういうことだったんですね。

4.3.3 ハッシュとシンボル

演習1
キーが'one'、'two'、'three'となっていて、それぞれの値が'uno'、'dos'、'tres'となっているハッシュを作ってみてください。その後、ハッシュの各要素をみて、それぞれのキーと値を"'#{key}'のスペイン語は'#{value}'"といった形で出力してみてください。
(rails tutorial第4章より引用)

問題発生!!
出力する際↓のように日本語が文字化けしてしまう。

"one\x{E381}\xAE\x{E382}\xB9\x{E383}\x{9AE3}\x{82A4}\x{E383}\xB3\x{E8AA}\x{9EE3}\x{81AF}uno"
"two\x{E381}\xAE\x{E382}\xB9\x{E383}\x{9AE3}\x{82A4}\x{E383}\xB3\x{E8AA}\x{9EE3}\x{81AF}dos"
"three\x{E381}\xAE\x{E382}\xB9\x{E383}\x{9AE3}\x{82A4}\x{E383}\xB3\x{E8AA}\x{9EE3}\x{81AF}tres"

解決のために試したこと

一度コンソールを終了して

chcp 65001

コマンドで文字コードをutf-8にした

結果
全角文字を入力しようとするとコマンドプロンプトが落ちる、、、

それから色々と調べ、以下の記事を参考にし、無理やり表示させることは出来るが、windowsとの相性が良くないということを確認しました。
https://qiita.com/jnchito/items/08b5be458134073c60e3 (下に記載されているコラム)
https://teratail.com/questions/198313

最終的に
演習の課題であるハッシュの作り方とeachメソッドを使った出力の仕方は理解できたので次に進むことにしました。

4.4.5 ユーザークラス

余談です。

rails tutorialではアプリケーションのルートディレクトリにexample_user.rbファイルを作成とありました。

格好よくtouchコマンドでファイルを作成しようとしたところ

'touch' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

また出ました、、、笑

コマンドプロンプトで同様の動きをするコマンドが

type nul > ファイル名

とのことでしたのでそちらのコマンドで実行しました。
linuxコマンドが使えないの不便ですね、、、

終わりに

第4章はrubyの理解も深まり面白い内容でした。

、、、、、、ターミナル変えた方がいいのかな、、、、笑