#+OPTIONS: ^:{} #+TITLE: はじめてのRuby #+AUTHOR: Shun Takahashi #+LANGUAGE: jp #+OPTIONS: H:4 toc:t num:2 # -*- mode: org; -*- #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: # +SETUPFILE: /Users/bob/Github/org-html-themes/setup/theme-readtheorg-local-daddygongon.setup # * drillを作ってみる # 1. まず,Listを取り出す # 1. 実行結果をつける # 1. コードの振る舞いを記述するタイトルをつけていく. * print,puts,pメソッド ** helloruby.rb 「Hello, Ruby.」という文字列を表示するプログラムを作成せよ。文字列の終わりは改行すること。 #+begin_src ruby print "Hello, Ruby.\n" #+end_src #+begin_example > answer.rb Hello, Ruby. #+end_example ** helloruby_2.rb 「Hello, "Ruby".」という文字列を表示するプログラムを作成せよ。文字列の終わりは改行すること。 #+begin_src ruby print "Hello, \"Ruby\".\n" #+end_src #+begin_example > answer.rb Hello, "Ruby". #+end_example ** p_method.rb 「"Hello,\n\tRuby."」という文字列を表示するプログラムを作成せよ。 #+begin_src ruby p "Hello,\n\tRuby." #+end_src #+begin_example > answer.rb "Hello,\n\tRuby." #+end_example * コマンドラインからのデータの入力 ** print_argv.rb コマンドラインから5つの引数を受け取り、受け取った順に表示するプログラムを作成せよ。 #+begin_src ruby puts ARGV[0] puts ARGV[1] puts ARGV[2] puts ARGV[3] puts ARGV[4] #+end_src #+begin_example > ruby answer.rb 1st 2nd 3rd 4th 5th 1st 2nd 3rd 4th 5th #+end_example ** arg_arith.rb コマンドラインから2つの引数を受け取って数値に変換し、その和、差、積、商を表示するプログラムを作成せよ。 #+begin_src ruby num0 = ARGV[0].to_i num1 = ARGV[1].to_i sum = num0 + num1 dif = num0 - num1 pro = num0 * num1 quo = num0 / num1 puts sum puts dif puts pro puts quo #+end_src #+begin_example > ruby answer.rb 5 3 8 2 15 1 #+end_example * 変数 ** area_volume.rb 3つの数値をx、y、zとして受け取り、縦x、横y、高さzの直方体の表面積と体積を求め、表示するプログラムを作成せよ。 #+begin_src ruby x = ARGV[0].to_i y = ARGV[1].to_i z = ARGV[2].to_i area = (x * y + y * z + z * x) * 2 volume = x * y * z print '表面積=', area, "\n" print '体積=' volume, "\n" #+end_src #+begin_example > ruby answer.rb 10 20 30 表面積=2200 体積=6000 #+end_example * 条件判断 ** greater_smaller_else.rb 1つの数値を受け取り、それが10より大きければ「greater」小さければ「smaller」と表示するプログラムを作成せよ。 #+begin_src ruby a = ARGV[0].to_i if a >= 10 print "greater\n" else print "smaller\n" end #+end_src #+begin_example ruby >ruby answer.rb 20 greater >ruby answer.rb 5 smaller #+end_example * 繰り返し ** 1_to_n.rb 1つの数値をnとして受け取り、1からnまでの数を順番に表示するプログラムを作成せよ。 #+begin_src ruby n = ARGV[0].to_i i = 1 while i <= n print i, "\n" i += 1 end #+end_src #+begin_example ruby > ruby answer.rb 5 1 2 3 4 5 #+end_example ** five_times.rb # while文と動作での差別化難しい 「All work and no play makes Jack a dull boy.」と5行表示するプログラムを作成せよ。 #+begin_src ruby 5.times do print "All work and no play makes Jack a dull boy.\n" end #+end_src #+begin_example > answer.rb All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. #+end_example * 配列 ** 配列からオブジェクトを取り出す 1つの数値をnとして受け取り、配列のn番目の要素を取り出し、表示するプログラムを作成せよ。ただし、配列はプログラム内で定義し、配列には数値が入るものとする。 #+begin_src ruby nums = [3, 1, 4, 1, 5] print nums[ARGV[0].to_i] #+end_src #+begin_example ruby > ruby answer.rb 0 3 > ruby answer.rb 3 1 #+end_example ** 配列にオブジェクトを格納する 配列の先頭の要素をコマンドラインに入力した要素に変更するプログラムを作成せよ。 ただし、配列はプログラム内で定義し、配列には数値が入るものとする。 #+begin_src ruby nums = [3, 1, 4, 1, 5] nums[0] = ARGV[0].to_i print nums #+end_src #+begin_example > ruby answer.rb 5 [5, 1, 4, 1, 5] #+end_example ** 配列の大きさ 配列を表示し、その配列の大きさも表示するプログラムを作成せよ。 ただし、配列はプログラム内で定義すること。 #+begin_src ruby nums = [3, 1, 4, 1, 5] print nums, "\n" print nums.size, "\n" #+end_src #+begin_example > ruby answer.rb [3, 1, 4, 1, 5] 5 #+end_example ** 配列と繰り返し 配列全体を表示してから、配列の要素を順に表示するプログラムを作成せよ。 ただし、配列はプログラム内で定義すること。 #+begin_src ruby nums = [3, 1, 4, 1, 5] print nums, "\n" nums.each do |n| puts n end #+end_src #+begin_example > ruby answer.rb [3, 1, 4, 1, 5] 3 1 4 1 5 #+end_example * ハッシュ ** シンボル 1つの文字列を受け取り、シンボルに変換して表示するプログラムを作成せよ。 #+begin_src ruby n = ARGV[0] p n.to_sym #+end_src #+begin_example > ruby answer.rb hash :hash #+end_example ** ハッシュの操作 :name, :furigana というそれぞれのキーに"高橋", "タカハシ"というオブジェクトが格納されているハッシュを作成、表示し、さらに:tel というキーに"000-1234-5678"を格納して再度表示するプログラムを作成せよ。 #+begin_src ruby address = { name: "高橋", furigana: "タカハシ" } puts address address[:tel] = "000-1234-5678" puts address #+end_src #+begin_example > ruby answer.rb {:name=>"高橋", :furigana=>"タカハシ"} {:name=>"高橋", :furigana=>"タカハシ", :tel=>"000-1234-5678"} #+end_example * 正規表現 ** パターンとマッチング 1つの文字列を受け取り、それが「Hello, Ruby」とマッチするなら「match.」マッチしないなら「not match.」と表示するプログラムを作成せよ。 #+begin_src ruby n = /#{ARGV[0]}/ if n =~ "Hello, Ruby." print "match.\n" else print "not match\n" end #+end_src #+begin_example > ruby answer.rb Ruby match. > ruby answer.rb RUBY not match. #+end_example * ファイルからの読み込み ** read_text.rb 1つの文字列を受け取り、文字列と一致するファイル名のテキストデータを表示するプログラムを作成せよ。 #+begin_src ruby filename = ARGV[0] text = File.read(filename) print text #+end_src #+begin_example >ruby answer.rb [filename] [text] #+end_example ** read_line.rb 1つの文字列を受け取り、文字列と一致するファイル名のテキストデータを1行ずつ読み取り、表示するプログラムを作成せよ。 #+begin_src ruby filename = ARGV[0] file = File.open(filename) file.each_line do |line| print line end file.close #+end_src #+begin_example #+end_example ** simple_grep.rb 2つの文字列を受け取り、2つ目の文字列に一致するファイル名のテキストデータの各行から、1つ目の文字列にマッチする行を出力するプログラムを作成せよ。 #+begin_src ruby pattern = Regexp.new(ARGV[0]) filename = ARGV[1] file = File.open(filename) file.each_line do |line| if pattern =~ line print line end end file.close #+end_src #+begin_example >ruby answer.rb [pattern] [filename] #+end_example * メソッドの作成 ** hello_ruby2.rb 「Hello, Ruby.」と表示するメソッドhelloを作成し、helloメソッドを用いて「Hello, Ruby.」と表示するプログラムを作成せよ。 #+begin_src ruby def hello puts 'Hello, Ruby.' end hello #+end_src #+begin_example > ruby answer.rb Hello, Ruby. #+end_example ** hello_ruby3.rb 1つの文字列を受け取り、「Hello, 受け取った文字列.」と表示するメソッドhelloを作成し、 2つの文字列を受け取り、「Hello, 受け取った文字列.」と2行表示するプログラムを作成せよ。 #+begin_src ruby def hello(name) print 'Hello, ', name, ".\n" end hello(ARGV[0]) hello(ARGV[1]) #+end_src #+begin_example > ruby answer.rb Ruby Takahashi Hello, Ruby. Hello, Takahashi. #+end_example * 別のファイルを取り込む ** ディレクトリ内のファイルの取り込み 1つの文字列を受け取り、「Hello, 受け取った文字列.」と表示するメソッドhelloが書かれたプログラムhello.rbがある。 このプログラムを取り込んで、1つの文字列を受け取り、「Hello, 受け取った文字列.」と表示するプログラムを作成せよ。 - hello.rb #+begin_src ruby def hello(name) print 'Hello, ', name, "\n" end #+end_src #+begin_src ruby require_relative "hello" name = ARGV[0] hello(name) #+end_src #+begin_example > answer.rb Ruby Hello, Ruby. #+end_example ** Rubyの標準ライブラリ Rubyの標準ライブラリ「date」を用いて、Rubyが誕生した1993年2月24日から、今日までの日数を表示するプログラムを作成せよ。 #+begin_src ruby require "date" days = Date.today - Date.new(1993, 2, 24) puts days.to_i #+end_src #+begin_example > ruby answer.rb 9302 #+end_example - 2018/8/14時点