第4章レビュー

rubyをインストールした。

rubyのインストールは難しいのかなと思っていたら、かなりすんなりできた。けれど、なんとまぁコマンドプロンプトが使えない。普段Linuxのコマンドを使っていたのでWindowsは苦労しました。今回使ったコマンドはこれ

cd path
チェンジディレクトリです。ディレクトリを移動していくコマンド
dir
今いるディレクトリにどんなディレクトリやファイルがあるか見れる
mddir
ディレクトリを作成

やっとRubyのコードをいじり始めた。まずはRubyファイルを入れておくディレクトリを適当に作って、そこに"hello.rb"ファイルを作成する。
これを下記のように記述。

puts("hello world!")

コマンドプロンプト

ruby hello.rb

と入力する。

puts関数
引数で指定された値をコンソールに出力する。引数の後には改行が入る。
関数リスト
引数を複数使うときのルール。引数を区切るカンマ","の後は空白を入れる
puts("hello", "world", "!")

実行結果

hello
world
!

カンマの後は改行される。これはRubyの性格が出ていると印象に残った。が、印象に残ったくせに忘れてしまい、後の練習問題で大惨事がおきました。この話は下記でお話します。

式展開
リテラル中に変数が含まれる時、"#{式}"で囲み結果の値を出力する。

さて、"カンマの後は空白を入れる"という規約があります。

puts(1, 2)

この"空白"がやっかいなんです。何故やっかいかというと・・・

puts( moji(), ji() )

こんな風に2重括弧"(())"の間にスペースを入れる書き方がありますよね。これは人の好みによりますが、スペースは入れないほうが良いそうです。

puts(moji(), ji())

これのほうが魅力的?らしいです。あくまでも人の好みだと思うので、皆さん、わが道を突っ走るんだ。私はチキンなんで突っ走らないけどw


コンソールから入力して表示する方法

puts("What's your name ?")
name = gets()
puts("hello #{name} !")

実行結果

What's your name ?
world
hello world
 !

式展開の後に改行が入るのが気にくわない。これは、gets関数で入力する時、最後に押したENTERキーが入っている。邪魔なので、ENTERキーは表示したくない。

開始位置
文字の先頭を0とし、右へずれるごとに+1される
終了位置
文字の末尾を-1として、左へずれるごとに-1される

変数nameを開始位置を0から末尾の2文字目まで表示させるとする。つまり、最後の文字以外を出力する。

(略)
puts("hello #{name[0..-2] !}")

実行結果

What's your name ?
world
hello world !

練習問題

4.1 puts関数を3回使う方法と、1回使う方法で下記の文字列を出力する

Good morning !
Good afternoon !
Good evening !

puts三回使うのは簡単だった。

puts("Good morning !")
puts("Good afternoon !")
puts("Good evening !")

しかし、putsを1回しか使えないのには苦戦。

puts("Good morning #{\n} Good afternoon ! #{\n} Good evening !")

とか意味わからんことやってました。アホです。アホすぎます。
文字リテラルの中には"\n"はそのまま入れてはいけないと思ってたんです。何かエスケープする方法があるのではないか・・・と考えてました。変数は#{}で囲むことは知っていたので、とりあえず#{}で囲もう!と考えました。実行すれば、当然エラー。
文字リテラル内で#{}が使えるなら、\nだって普通に使えそうなことに気付かなかった。そして本に改行の説明が1行だけあった。ざっくり読んだのがいけなかったorz もう一回4章読み直そう。
直したコード これでできた

puts("Good morning \n Good afternoon ! \n Good evening !")

解答

puts("Good morning", "Good afternoon !", "Good evening !")

解答はこんなのだった!そういえば本文でこんなことやってましたね(^_^;)わすれてた。関数リストの","の後は改行される!!!

練習問題

4.2 電話番号を入力して、3桁-4桁-4桁を表示

phone number?
12345678901
123 - 4567 - 8901

コード

puts("phone number?")
phone_no = gets()
puts("#{phone_no[0..2]} - #{phone_no[3..-6]} - #{phone_no[-5..-2]}")

問題なし〜♪