LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

チャート式Ruby-I(puts)

!Mac OS X-10.15.7 !ruby-2.7.1p83

イントロ

チャート式Rubyの1回目,お馴染みの"Hello world!"です.

目的

Shell, Emacs, Rubyを一度に覚えてもらいます.Rubyという言語がShellという環境でどれだけ有益かを実感してもらうためです.また,EmacsとShellのkey bindingの統一性を知ることで,達人プログラマの作業効率がなぜ良いかをわかってもらうためです.

作業手順

このテキストの構成は

  • お題
  • 簡単な解説
  • 詳しい解法
  • 類題

となっています.それぞれの記述に従って作業を進めれば,その内容が理解できるはずです.

ここで,忘れないための工夫をしてください.

  • 参照しやすいように同じ構成
  • 題目に内容をわかりやく説明した文言をつける
  • 詳しい解法はくどいかもしれませんが,テスト駆動を意識しています
  • 自分で作った解答をincludeして自分のできを評価してください
  • わからない内容や単語は自分で調べてテキストに書き加えるようにしてください.
  • 翌週にformatしてqiitaに出力しましょう.それで独自のテキストが出来上がります.

内容のformatについて

このテキストでは,Shellでの入力とsource codeをEmacsとかで打ち込むのを区別しています.

> cat hello.rb

こういう感じで,command prompt(>)をつけているのはShell入力を意図しています.その出力は普通plain textですが,

hello.rb
puts "Hello world."

という感じで,Rubyのsource codeみたいに出力させています.

puts hello_world

お題

まずはhello_worldですね.

Hello world.

と打ち出すプログラムを作ります.

解説

Rubyで String を打ち出すのにはいくつかの方法があります.どれを使ってもいいですし,Rubyistは状況に応じて全てを使います.

method 使用状況
print 普通に使う.要改行
puts 次に普通に使う. 自動改行
p codingの最中にdebugがわりに打ち出すとき
pp pのpretty print, require 'pp'が必要
printf cのがあります.formatを整えるときに便利

そのほかにもいくつもありますが,まずはこれを覚えましょう.

String はシングルコーテーション ' で囲うのと,ダブル " で囲うのの二種類があります.シングルは中身をいじらないとき,ダブルはちょこちょこいじるときです.

詳しい解法

まずはシングルで囲って,

puts 'hello world'

を試しましょう.

> mkdir code
> cd code
> emacs puts_hello_world.rb

としてEmacsを開いてcodeを打ち込んでください.c-x c-sでsaveしたらc-zで一時中断して,

> ruby puts_hello_world.rb

として走らせて見てください.動いた?

puts_hello_world.rb
puts 'hello world'

類題

pとかprintとかも試して見てください.違いを観察して,#でコメントをつけてp_print_hello_world.rbに書きなさい.


# start here for p and pp
p
pp

getsなんだけど,ARGV[0]で行きます!

お題

ruby hello_name.rb Rudy

と打ち込んだ時に,

Hello Rudy.

と返ってくるcodeを書け.

簡単な解説

puts したら普通次は gets なんですが,目的の一つであるShell環境では,command line interfaceで作業をするためにARGV[0]というのを使って行きます.

puts ARGV[0]

とhello_name.rbに打ち込んで,

> ruby hello_name.rb Rudy

としてください.どうよ? うちの愛犬の名前は出たやろか?

hello_name.rb
puts ARGV[0]

ARGV[0] というのは引数配列(たぶんargument vectorの略)の0番目を意味しています.UNIX Shell上ではcommandにoption引数を直接渡すのが普通です.そのために ARGV が用意されています.

次に "Hello Rudy." と打ち出させることをかんがえます.これをするにはいくつかの方法があります.これもいろいろ試して見てください.

puts puts "Hello " + ARGV[0]
puts puts "Hello #{ARGV[0]}"
print print "Hello #{ARGV[0]}\n"
print print "Hello " + ARGV[0] + "\n"

Cからの人は, printf もありです.

printf("Hello %s.\n", ARGV[0])

でも慣れてくると冗長なんで使わなくなります.多分使うのは,数値計算の出力formatを揃えたいときぐらいでしょうね.

あ. printf の中身は,この頃多用するようになってきました.

print "Hello %10s. You were adapted on %s.\n" % ['Rudy', '03/21/19']

なんていう使い方でformatが揃えられるようになったんで.

詳しい解法

まずは動作させて見ます.

> ruby hello_name.rb Rudy
Rudy

って返ってます? これを変更します.

> ps

でEmacsが今どういう状態(process status)かを確認して,fg (fore ground)で復帰するか,emacs hello_name.rb で新たなEmacsプロセスを起動します.

puts "Hello #{ARGV[0]}"

がこういう状況ではよく使われます.ちゃんとでています?

類題

次に"Hello Rudy."という出力を保存することを考えます.

ruby hello_name.rb bob > hello_name.txt

としてhello_name.txtに自分への挨拶を出力させて見てください.

Hello bob.

とかね.> は,出力先を指定したファイル(ここではhello_name.txt)に変更(re-direct)するShellの機能です.

cat hello_name.txt

で中身をcat(con-cat-inate)できます.

ここで習った項目

Ruby言語,テキストエディターEmacs, コーディング環境Shellを一度に使ってきました.同じTerminal上での操作ですが,今何に向かって操作しているかを意識して覚えていくようにしてください.「英語の命令command」というのは同じです.

  • Ruby
    • puts, print, p, pp
    • ARGV[0]
  • Emacs
    • C-z, C-x C-s, C-x C-c
    • ps : process status
    • fg : fore ground, 一度中断したprocessを再度起動させる
  • Shell
    • mkdir, cd
    • cat
    • > (redirection)

  • source ~/git_hub/ruby_docs/chart_style_ruby/c1_puts_hello.org

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0