第4章レビュー
rubyをインストールした。
rubyのインストールは難しいのかなと思っていたら、かなりすんなりできた。けれど、なんとまぁコマンドプロンプトが使えない。普段Linuxのコマンドを使っていたのでWindowsは苦労しました。今回使ったコマンドはこれ
やっと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]}")
問題なし〜♪