このページは、世界最大級のオンライン学習プラットフォームUdemy(ユーデミー)「よくわかるRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう」と、Proglus(プログラス)受講生の方向けサポートサイトです。
コースの学習で使用したサンプルコードを掲載しています(一部除く)。
エラーが発生した時に見比べたり、動作するコードをコピー&ペースとして実行したいときなど、個人の学習用にご利用ください。
Ruby 2.5.1, Ruby on Rails 5.2.1にて動作確認をしております。その他の環境では動作が異なる場合があります。
ご意見、ご質問はUdemy、ProglusのQ&Aコーナーをご利用ください。
目次
- 1 よくあるご質問
- 2 はじめてのRuby入門
- 2.1 はじめてのRubyプログラム①
- 2.2 はじめてのRubyプログラム②
- 2.3 演習 : Hello, Ruby!①
- 2.4 演習 : Hello, Ruby!②
- 2.5 コメント
- 2.6 変数(ローカル変数)
- 2.7 変数の命名規則
- 2.8 定数
- 2.9 数値(Numeric)
- 2.10 文字列(String) ①
- 2.11 文字列②
- 2.12 空白文字
- 2.13 比較演算子による値の比較
- 2.14 数値と文字列は暗黙的に変換されない
- 2.15 数値と文字列は暗黙的に変換されない
- 2.16 インクリメントとデクリメント
- 2.17 真偽値と論理演算子 ②
- 2.18 and, or, not
- 2.19 条件分岐 if 例題①
- 2.20 条件分岐 if 例題②
- 2.21 演習回答:テーマパークの入場料計算
- 2.22 条件分岐 unless
- 2.23 条件分岐 case
- 2.24 メソッド
- 2.25 メソッドの命名規則
- 2.26 演習回答:動物の鳴き声を出し分けるメソッド
- 2.27 演習回答:FizzBuzzのメソッド
- 2.28 出力 puts, print , p, pp
- 2.29 配列
- 2.30 ハッシュ
- 2.31 繰り返し処理 each, for
- 2.32 繰り返し処理 each ハッシュの場合
- 2.33 繰り返し処理 loop
- 2.34 繰り返し処理 while
- 2.35 繰り返し処理 upto, downto
- 2.36 繰り返し処理 step
- 2.37 オリジナルのクラスを作成する
- 2.38 アクセサメソッド①、②
- 2.39 クラス変数, クラスメソッド
- 2.40 クラスと定数
- 2.41 クラスの継承
- 2.42 メソッドの公開範囲
- 2.43 モジュール
- 2.44 例外と例外処理
- 3 【旧版:Rails5】はじめてのRuby on Rails入門
- 4 【旧版:Rails5】版ミニQ&Aアプリ
- 5 注意事項
よくあるご質問
Q. 開発環境に、AWS Cloud9を使わなくても良いですか?
A. はいOKです。ただし、macOSとWindws7,8,10で発生する手順が異なってくるため、よくわからない方は、ひとまずCloud9(1年無料枠)をご利用いただくことをおすすめしています。個別の環境に依存する内容のサポートはできない場合があります。
Q. Windows環境でRuby installerを使用して環境構築をしたのですが、サンプルコードが動作しません。
A. Ruby installerは何かとトラブルが多いようです。このコースでは、Ruby installerはサポートしていません。
はじめてのRuby入門
はじめてのRubyプログラム①
$ irb 2.5.1 :001 > 'Hello, World!' => "Hello, World!" 2.5.1 :002 > puts 'Hello, World!' Hello, World! => nil 2.5.1 :003 > 1 + 1 => 2 2.5.1 :004 > 10 - 1 => 9 2.5.1 :005 > 2.5.1 :005 > exit
はじめてのRubyプログラム②
puts 'Hello, World!' puts 10 + 3
演習 : Hello, Ruby!①
$ irb 2.5.1 :001 > 'Hello, World!' => "Hello, World!" 2.5.1 :002 > puts 'Hello, World!' Hello, World! => nil 2.5.1 :003 > 1 + 1 => 2 2.5.1 :004 > 10 - 1 => 9 2.5.1 :005 > 2.5.1 :005 > exit
演習 : Hello, Ruby!②
hello_ruby.rb
puts 'Hello, Ruby!'
コメント
comment.rb
# puts 'Hello, World!' =begin puts 'Hello, World!' puts 'Hello, World!' puts 'Hello, World!' =end # puts 'Hello, World!' # puts 'Hello, World!' # puts 'Hello, World!' # This is a comment.
変数(ローカル変数)
$ irb 2.5.1 :001 > s = 'Hello!' => "Hello!" 2.5.1 :002 > puts s Hello! => nil 2.5.1 :003 > n = 10 * 2 => 20 2.5.1 :004 > puts n 20 => nil 2.5.1 :005 > i Traceback (most recent call last): 2: from /usr/local/rvm/rubies/ruby-2.5.1/bin/irb:11:in `' 1: from (irb):5 NameError (undefined local variable or method `i' for main:Object) 2.5.1 :006 > i = nil => nil 2.5.1 :007 > exit
変数の命名規則
$ irb 2.5.1 :001 > price = 100 => 100 2.5.1 :002 > price1 = 100 => 100 2.5.1 :003 > _price = 100 => 100 2.5.1 :004 > 1price = 100 Traceback (most recent call last): 1: from /usr/local/rvm/rubies/ruby-2.5.1/bin/irb:11:in `' SyntaxError ((irb):4: syntax error, unexpected tIDENTIFIER, expecting end-of-input) 1price = 100 ^~~~~ 2.5.1 :005 > price_cost = 100 => 100 2.5.1 :006 > priceCost = 100 => 100 2.5.1 :007 > exit
定数
準備中
数値(Numeric)
$ irb 2.5.1 :001 > 100 => 100 2.5.1 :002 > -50 => -50 2.5.1 :003 > 2.5 => 2.5 2.5.1 :004 > -5.25 => -5.25 2.5.1 :005 > 1 + 1 => 2 2.5.1 :006 > 10 - 1 => 9 2.5.1 :007 > 13 * 2 => 26 2.5.1 :008 > 100 / 5 => 20 2.5.1 :009 > x = 1 => 1 2.5.1 :010 > -x => -1 2.5.1 :011 > 2.5.1 :011 > 3 / 2 => 1 2.5.1 :012 > 3.0 / 2 => 1.5 2.5.1 :013 > 3 / 2.0 => 1.5 2.5.1 :014 > 3.0 / 2.0 => 1.5 2.5.1 :015 > 10 % 3 => 1 2.5.1 :016 > 10 ** 3 => 1000 2.5.1 :017 > x = 3 => 3 2.5.1 :018 > x.to_f => 3.0 2.5.1 :019 > x.to_f / 2 => 1.5 2.5.1 :020 > x / 2 => 1 2.5.1 :021 > y = 2 => 2 2.5.1 :022 > x / y.to_f => 1.5 2.5.1 :023 > x.to_f / y => 1.5 2.5.1 :024 > x.to_f / y.to_f => 1.5 2.5.1 :025 > 1.class => Integer 2.5.1 :026 > 1.1.class => Float 2.5.1 :027 > 1.methods => [:-@, :**, :<=>, :upto, :<<, :<=, :>=, :==, :chr, :===, :>>, :[], :%, :&, :inspect, :+, :ord, :-, :/, :*, :size, :succ, :<, :>, :to_int, :coerce, :divmod, :to_s, :to_i, :fdiv, :modulo, :remainder, :abs, :magnitude, :integer?, :numerator, :denominator, :rationalize, :to_r, :floor, :ceil, :round, :truncate, :lcm, :to_f, :^, :odd?, :even?, :allbits?, :anybits?, :nobits?, :downto, :times, :pred, :pow, :bit_length, :digits, :gcd, :gcdlcm, :next, :div, :|, :~, :+@, :eql?, :singleton_method_added, :i, :real?, :zero?, :nonzero?, :finite?, :infinite?, :step, :positive?, :negative?, :rectangular, :rect, :arg, :real, :imag, :imaginary, :angle, :abs2, :conjugate, :to_c, :polar, :conj, :phase, :clone, :dup, :quo, :between?, :clamp, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :public_method, :singleton_method, :method, :define_singleton_method, :public_send, :extend, :to_enum, :enum_for, :pp, :=~, :!~, :respond_to?, :freeze, :object_id, :send, :display, :nil?, :hash, :class, :singleton_class, :itself, :yield_self, :tainted?, :taint, :untrust, :untaint, :trust, :untrusted?, :methods, :frozen?, :protected_methods, :singleton_methods, :private_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__] 2.5.1 :028 > exit
文字列(String) ①
$ irb 2.5.1 :001 > 'abcdef' => "abcdef" 2.5.1 :002 > "abcdef" => "abcdef" 2.5.1 :003 > puts "Ruby\nProgramming" Ruby Programming => nil 2.5.1 :004 > puts 'Ruby\nProgramming' Ruby\nProgramming => nil 2.5.1 :005 > first_name = 'Yuta' => "Yuta" 2.5.1 :006 > last_name = 'Nakamura' => "Nakamura" 2.5.1 :007 > puts "My name is #{first_name} #{last_name}." My name is Yuta Nakamura. => nil 2.5.1 :008 > puts 'My name is #{first_name} #{last_name}.' My name is #{first_name} #{last_name}. => nil
文字列②
2.5.1 :009 > puts 'Yuta' + 'Nakamura' YutaNakamura => nil 2.5.1 :010 > puts 'Yuta' + ' ' + 'Nakamura' Yuta Nakamura => nil 2.5.1 :011 > s = 'Hello, World!' => "Hello, World!" 2.5.1 :012 > puts s.upcase HELLO, WORLD! => nil 2.5.1 :013 > puts s Hello, World! => nil 2.5.1 :014 > s.upcase! => "HELLO, WORLD!" 2.5.1 :015 > puts s HELLO, WORLD! => nil 2.5.1 :016 > 'abc'.class => String 2.5.1 :017 > 'abc'.method Traceback (most recent call last): 3: from /usr/local/rvm/rubies/ruby-2.5.1/bin/irb:11:in `' 2: from (irb):17 1: from (irb):17:in `method' ArgumentError (wrong number of arguments (given 0, expected 1)) 2.5.1 :018 > 'abc'.methods => [:encode!, :include?, :%, :*, :+, :count, :partition, :to_c, :sum, :next, :casecmp, :casecmp?, :insert, :bytesize, :match, :match?, :succ!, :<=>, :next!, :index, :rindex, :upto, :==, :===, :chr, :=~, :byteslice, :[], :[]=, :scrub!, :getbyte, :replace, :clear, :scrub, :empty?, :eql?, :-@, :downcase, :upcase, :dump, :setbyte, :swapcase, :+@, :capitalize, :capitalize!, :undump, :downcase!, :oct, :swapcase!, :lines, :bytes, :split, :codepoints, :freeze, :inspect, :reverse!, :grapheme_clusters, :reverse, :hex, :scan, :upcase!, :crypt, :ord, :chars, :prepend, :length, :size, :start_with?, :succ, :sub, :intern, :chop, :center, :<<, :concat, :strip, :lstrip, :end_with?, :delete_prefix, :to_str, :to_sym, :gsub!, :rstrip, :gsub, :delete_suffix, :to_s, :to_i, :rjust, :chomp!, :strip!, :lstrip!, :sub!, :chomp, :chop!, :ljust, :tr_s, :delete, :rstrip!, :delete_prefix!, :delete_suffix!, :tr, :squeeze!, :each_line, :to_f, :tr!, :tr_s!, :delete!, :slice, :slice!, :each_byte, :squeeze, :each_codepoint, :each_grapheme_cluster, :valid_encoding?, :ascii_only?, :rpartition, :encoding, :hash, :b, :unicode_normalize!, :unicode_normalized?, :to_r, :force_encoding, :each_char, :encode, :unicode_normalize, :unpack, :unpack1, :<=, :>=, :between?, :<, :>, :clamp, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :public_method, :singleton_method, :method, :define_singleton_method, :public_send, :extend, :to_enum, :enum_for, :pp, :!~, :respond_to?, :object_id, :send, :display, :nil?, :class, :singleton_class, :clone, :dup, :itself, :yield_self, :tainted?, :taint, :untrust, :untaint, :trust, :untrusted?, :methods, :frozen?, :protected_methods, :singleton_methods, :private_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__] 2.5.1 :019 > exit
空白文字
$ irb 2.5.1 :001 > 10 + 2 - 1 => 11 2.5.1 :002 > 10+2-1 => 11 2.5.1 :003 > 10 + 2 - 1 => 11 2.5.1 :004 > exit
比較演算子による値の比較
$ irb 2.5.1 :001 > 1 < 2 => true 2.5.1 :002 > 1 <= 2 => true 2.5.1 :003 > 1 > 2 => false 2.5.1 :004 > 1 == 1 => true 2.5.1 :005 > 1 != 2 => true 2.5.1 :006 > exit
数値と文字列は暗黙的に変換されない
$ irb 2.5.1 :001 > 1.0 + 2.0 * 3.0 / 4.0 => 2.5 2.5.1 :002 > (1.0 + 2.0) * 3.0 / 4.0 => 2.25 2.5.1 :018 > exit
数値と文字列は暗黙的に変換されない
$ irb 2.5.1 :001 > 1 + '1' Traceback (most recent call last): 3: from /usr/local/rvm/rubies/ruby-2.5.1/bin/irb:11:in `' 2: from (irb):1 1: from (irb):1:in `+' TypeError (String can't be coerced into Integer) 2.5.1 :002 > 1 + '1'.to_i => 2 2.5.1 :003 > 1 + '1.1'.to_f => 2.1 2.5.1 :004 > number = 1 => 1 2.5.1 :005 > 'Number is' + number Traceback (most recent call last): 3: from /usr/local/rvm/rubies/ruby-2.5.1/bin/irb:11:in ` ' 2: from (irb):5 1: from (irb):5:in `+' TypeError (no implicit conversion of Integer into String) 2.5.1 :006 > 'Number is ' + number.to_s => "Number is 1" 2.5.1 :007 > exit
インクリメントとデクリメント
$ irb 2.5.1 :001 > n = 1 => 1 2.5.1 :002 > n = n + 1 => 2 2.5.1 :003 > n += 1 => 3 2.5.1 :004 > n = n - 1 => 2 2.5.1 :005 > n -= 1 => 1 2.5.1 :006 > exit
真偽値と論理演算子 ②
$ irb 2.5.1 :001 > t1 = true => true 2.5.1 :002 > t2 = true => true 2.5.1 :003 > f1 = false => false 2.5.1 :004 > f2 = false => false 2.5.1 :005 > t1 && t2 => true 2.5.1 :006 > t1 && f1 => false 2.5.1 :007 > t1 || f1 => true 2.5.1 :008 > f1 || f2 => false 2.5.1 :009 > !t1 => false 2.5.1 :010 > !f1 => true 2.5.1 :011 > exit
and, or, not
$ irb 2.5.1 :001 > t1 = true => true 2.5.1 :002 > t2 = true => true 2.5.1 :003 > f1 = false => false 2.5.1 :004 > f2 = false => false 2.5.1 :005 > t1 && t2 => true 2.5.1 :006 > t1 and t2 => true 2.5.1 :007 > t1 && f1 => false 2.5.1 :008 > t1 and f2 => false 2.5.1 :009 > t1 || t2 => true 2.5.1 :010 > t1 or t2 => true 2.5.1 :011 > t1 || f2 => true 2.5.1 :012 > t1 or f2 => true 2.5.1 :013 > f1 || f2 => false 2.5.1 :014 > f1 or f2 => false 2.5.1 :015 > !t1 => false 2.5.1 :016 > not(t1) => false 2.5.1 :017 > !f1 => true 2.5.1 :018 > not(f1) => true 2.5.1 :019 > 2.5.1 :019 > !t1 || t1 => true 2.5.1 :020 > not t1 || t1 => false 2.5.1 :021 > t1 || t2 && f1 => true 2.5.1 :022 > t1 or t2 and f1 => false 2.5.1 :023 > (t1 || t2) && f1 => false 2.5.1 :024 > exit
条件分岐 if 例題①
if.rb
score = 59 if score >= 90 puts 'A' elsif score >= 80 puts 'B' elsif score >= 60 puts 'C' else puts 'D' end
条件分岐 if 例題②
if_animal.rb
animal = 'horse' if animal == 'cat' puts 'meow' elsif animal == 'dog' puts 'bowwow' elsif animal == 'cow' puts 'moomoo' else puts 'Not fount.' end
演習回答:テーマパークの入場料計算
exercise_branch.rb
age = 5 if age >= 12 puts '5,000' elsif age >= 6 puts '2,500' else puts '1,000' end
条件分岐 unless
unless.rb
# 例題① # n = 1 # if !n.zero? # puts 'Not zero.' # end ## 例題②, ③ n = 1 unless n.zero? puts 'Not zero.' else puts 'This is zero.' end
条件分岐 case
case.rb
# if # stone = 'opal' # if stone == 'ruby' # puts 'July' # elsif stone == 'peridot' # puts 'August' # elsif stone == 'sapphire' # puts 'September' # else # puts 'Not Found' # end # case stone = 'opal' case stone when 'ruby' puts 'July' when 'peridot' puts 'August' when 'sapphire' puts 'September' else puts 'Not Found.' end
メソッド
mehod_hello.rb
def hello_world puts 'Hello, World!' end hello_world
method_add.rb def add(x, y) x + y end puts add(10, 1)
メソッドの命名規則
method_name.rb
# def hello # def hello_world # def hello_world1 # def 1hello_world def _hello_world puts 'Hello' end _hello_world
演習回答:動物の鳴き声を出し分けるメソッド
exercise_method_animal.rb
def cry(animal) if animal == 'cat' 'meow' elsif animal == 'dog' 'bowwow' else '???' end end puts cry('horse')
演習回答:FizzBuzzのメソッド
fizz_buzz.rb
def fizz_buzz(n) if n % 15 == 0 'FizzBuzz' elsif n % 3 == 0 'Fizz' elsif n % 5 == 0 'Buzz' else n.to_s end end puts fizz_buzz(1) puts fizz_buzz(2) puts fizz_buzz(3) puts fizz_buzz(4) puts fizz_buzz(5) puts fizz_buzz(6) puts fizz_buzz(7) puts fizz_buzz(8) puts fizz_buzz(9) puts fizz_buzz(10) puts fizz_buzz(11) puts fizz_buzz(12) puts fizz_buzz(13) puts fizz_buzz(14) puts fizz_buzz(15)
出力 puts, print , p, pp
$ irb 2.5.1 :001 > puts 'Nakamura' Nakamura => nil 2.5.1 :002 > print 'Nakamura' Nakamura => nil 2.5.1 :003 > p 'Nakamura' "Nakamura" => "Nakamura" 2.5.1 :004 > pp 'Nakamura' "Nakamura" => "Nakamura" 2.5.1 :005 > exit
配列
$ irb 2.5.1 :001 > a = [1, 2, 3, 'aa', [1, 2, 3]] => [1, 2, 3, "aa", [1, 2, 3]] 2.5.1 :002 > a[0] => 1 2.5.1 :003 > a[1] => 2 2.5.1 :004 > puts a 1 2 3 aa 1 2 3 => nil 2.5.1 :005 > p a [1, 2, 3, "aa", [1, 2, 3]] => [1, 2, 3, "aa", [1, 2, 3]] 2.5.1 :006 > pp a [1, 2, 3, "aa", [1, 2, 3]] => [1, 2, 3, "aa", [1, 2, 3]] 2.5.1 :007 > a.empty? => false 2.5.1 :008 > b = [] => [] 2.5.1 :009 > b.empty? => true 2.5.1 :010 > a.include?('aa') => true 2.5.1 :011 > a.include?('b') => false 2.5.1 :012 > a.reverse => [[1, 2, 3], "aa", 3, 2, 1] 2.5.1 :013 > a => [1, 2, 3, "aa", [1, 2, 3]] 2.5.1 :014 > a.reverse! => [[1, 2, 3], "aa", 3, 2, 1] 2.5.1 :015 > a => [[1, 2, 3], "aa", 3, 2, 1] 2.5.1 :017 > a.shuffle => [3, 1, "aa", [1, 2, 3], 2] 2.5.1 :018 > 2.5.1 :018 > (0..25).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] 2.5.1 :019 > aa = (0..99).to_a.shuffle! => [67, 13, 56, 17, 34, 7, 97, 32, 25, 38, 11, 99, 33, 53, 82, 76, 92, 75, 70, 21, 9, 31, 36, 65, 88, 95, 23, 42, 61, 16, 1, 29, 90, 64, 4, 79, 59, 19, 60, 81, 78, 68, 37, 66, 0, 5, 77, 55, 46, 10, 72, 49, 83, 18, 80, 24, 94, 69, 73, 22, 58, 96, 91, 62, 8, 52, 47, 93, 35, 3, 51, 43, 28, 40, 41, 50, 48, 87, 98, 26, 27, 86, 6, 12, 84, 63, 39, 30, 14, 15, 20, 45, 89, 85, 2, 57, 44, 74, 71, 54] 2.5.1 :020 > aa => [67, 13, 56, 17, 34, 7, 97, 32, 25, 38, 11, 99, 33, 53, 82, 76, 92, 75, 70, 21, 9, 31, 36, 65, 88, 95, 23, 42, 61, 16, 1, 29, 90, 64, 4, 79, 59, 19, 60, 81, 78, 68, 37, 66, 0, 5, 77, 55, 46, 10, 72, 49, 83, 18, 80, 24, 94, 69, 73, 22, 58, 96, 91, 62, 8, 52, 47, 93, 35, 3, 51, 43, 28, 40, 41, 50, 48, 87, 98, 26, 27, 86, 6, 12, 84, 63, 39, 30, 14, 15, 20, 45, 89, 85, 2, 57, 44, 74, 71, 54] 2.5.1 :021 > 2.5.1 :021 > z = (0..10).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2.5.1 :022 > z << 20 => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :023 > z => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :024 > z.push(30) => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30] 2.5.1 :025 > z => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30] 2.5.1 :026 > z.pop => 30 2.5.1 :027 > z => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :028 > z.shift => 0 2.5.1 :029 > z => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :030 > z << 3 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3] 2.5.1 :031 > z << 6 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3, 6] 2.5.1 :032 > z.uniq => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :033 > z => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3, 6] 2.5.1 :034 > z.uniq! => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :035 > z => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20] 2.5.1 :036 > 2.5.1 :036 > s = ['my', 'name', 'is', 'nakamura'] => ["my", "name", "is", "nakamura"] 2.5.1 :037 > s.join => "mynameisnakamura" 2.5.1 :038 > s.join(' ') => "my name is nakamura" 2.5.1 :039 > s.join('_') => "my_name_is_nakamura" 2.5.1 :040 > s.sort => ["is", "my", "nakamura", "name"] 2.5.1 :041 > s.sort.reverse => ["name", "nakamura", "my", "is"] 2.5.1 :043 > s.sort!.reverse! => ["name", "nakamura", "my", "is"] 2.5.1 :044 > s => ["name", "nakamura", "my", "is"] 2.5.1 :045 > s.size => 4 2.5.1 :046 > exit
ハッシュ
$ irb 2.5.1 :001 > {} => {} 2.5.1 :002 > nakamura = {'name' => 'Nakamura', 'birthplace' => 'Nagano'} => {"name"=>"Nakamura", "birthplace"=>"Nagano"} 2.5.1 :003 > puts nakamura['name'] Nakamura => nil 2.5.1 :004 > puts nakamura['birthplace'] Nagano => nil 2.5.1 :005 > nakamura['age'] = 20 => 20 2.5.1 :006 > puts nakamura {"name"=>"Nakamura", "birthplace"=>"Nagano", "age"=>20} => nil 2.5.1 :007 > nakamura['age'] = 21 => 21 2.5.1 :008 > puts nakamura {"name"=>"Nakamura", "birthplace"=>"Nagano", "age"=>21} => nil 2.5.1 :009 > nakamura.delete('age') => 21 2.5.1 :010 > puts nakamura {"name"=>"Nakamura", "birthplace"=>"Nagano"} => nil 2.5.1 :011 > 2.5.1 :011 > sato = {name: 'Sato', birthplace: 'Tokyo'} => {:name=>"Sato", :birthplace=>"Tokyo"} 2.5.1 :012 > puts sato[:name] Sato => nil 2.5.1 :013 > puts sato[:birthplace] Tokyo => nil 2.5.1 :014 > sato[:age] = 20 => 20 2.5.1 :015 > puts sato {:name=>"Sato", :birthplace=>"Tokyo", :age=>20} => nil 2.5.1 :016 > sato[:age] = 21 => 21 2.5.1 :017 > puts sato {:name=>"Sato", :birthplace=>"Tokyo", :age=>21} => nil 2.5.1 :019 > sato.delete(:age) => 21 2.5.1 :020 > puts sato {:name=>"Sato", :birthplace=>"Tokyo"} => nil 2.5.1 :021 > 2.5.1 :021 > sato.keys => [:name, :birthplace] 2.5.1 :022 > sato.values => ["Sato", "Tokyo"] 2.5.1 :023 > sato.has_key?(:name) => true 2.5.1 :024 > sato.has_key?(:address) => false 2.5.1 :025 > sato.size => 2 2.5.1 :026 > exit
繰り返し処理 each, for
each.rb
# each numbers = [1,2,3,4,5] # numbers.each do |number| # puts number # end # numbers.each { |number| # puts number # } # numbers.each { |number| puts number } # colors = ['red', 'green', 'blue'] # colors.each do |color| # puts color # end for number in numbers do puts number end
繰り返し処理 each ハッシュの場合
each_hash.rb
scores = { luke: 100, jack: 90, robert: 70 } # scores.each do |k, v| # puts v # end # scores.each do |k, v| # puts "#{k}, #{v}" # end scores.each do |k, v| if v >= 80 puts "#{k}, #{v}" end end
繰り返し処理 loop
loop.rb
# ①loopメソッドを使って、 変数の値を0から1ずつ増やしながら出力。 # i = 0 # loop do # puts i # i += 1 # end # ②whileで書き換える # i = 0 # while true # puts i # i += 1 # end # ③0から9まで出力するプログラムをloopを使って、書く。 # i = 0 # loop do # puts i # i += 1 # break if i == 10 # end # ④配列[1,2,3,4,5] の値が、奇数の場合のみ、画面に出力する処理。 # eachとnextを利用 numbers = [1, 2, 3, 4, 5] numbers.each do |n| # next if n % 2 == 0 # next if n.even? next if n.odd? puts n end
繰り返し処理 while
while.rb
# 数字を0から9まで、10個出力するプログラム # をwhileを使って書いてみましょう。 i = 0 while i < 10 do puts i i += 1 end
繰り返し処理 upto, downto
upto.rb
# 数値を10から14まで1づつ増やしながら、値を出力 # uptoを使用する # 10.upto(14) { |n| puts n } # 数値を14から10まで1づつ減らしながら、値を出力 # downtoを使用する 14.downto(10) { |n| puts n }
繰り返し処理 step
# ①数値を1から10まで2ずつ増やしながら出力する # 1.step(10, 2) { |n| puts n } # ②数値を10から1まで2ずつ減らしながら出力する 10.step(1, -2) { |n| puts n}
オリジナルのクラスを作成する
# Carクラスの作成 # メソッド hello ・・・ helloと出力する機能 class Car def initialize(name) puts 'initialize' @name = name end def hello puts "Hello! I am #{@name}." end end car = Car.new('Kitt') car.hello karr = Car.new('Karr') karr.hello
アクセサメソッド①、②
accessor.rb
# Carクラスの作成 # メソッド hello ・・・ helloと出力する機能 class Car # attr_accessor :name # attr_reader :name attr_writer :name def initialize(name) # puts 'initialize' @name = name end def hello puts "Hello! I am #{@name}." end # def name # @name # end # def name=(value) # @name = value # end end car = Car.new('Kitt') # car.hello # car.@name NG # puts car.name # car.@name = 'Nakamura' NG car.name = 'Nakamura' # puts car.name
クラス変数, クラスメソッド
class_var.rb
class Car @@count = 0 def initialize(name) @name = name @@count += 1 end def hello puts "Hello! I am #{@name}. #{@@count} instance(s)." end def self.info puts "#{@@count} instance(s)." end end kitt = Car.new('Kitt') # kitt.hello Car.info karr = Car.new('Karr') # karr.hello Car.info nakamura = Car.new('Nakamura') # nakamura.hello Car.info
クラスと定数
class Car REGION = 'USA' @@count = 0 def initialize(name) @name = name @@count += 1 end def hello puts "Hello! I am #{@name}. #{@@count} instance(s)." end def self.info puts "#{@@count} instance(s). Region: #{REGION}" end end kitt = Car.new('Kitt') # kitt.hello Car.info karr = Car.new('Karr') # karr.hello Car.info nakamura = Car.new('Nakamura') # nakamura.hello Car.info puts Car::REGION
クラスの継承
sub_class.rb
# 1. Userクラスを作成 。 # 2. 自己紹介するメソッド hello を追加 # 3. Userクラスを継承した、AdminUserクラスを作成 # 4. 管理者として自己紹介するメソッド admin_helloを追加 class User def initialize(name) @name = name end def hello puts "Hello! I am #{@name}." end end class AdminUser < User def admin_hello puts "Hello! I am #{@name} from AdminUser." end # def hello # puts 'Admin!' # end end # nakamura = User.new('Nakamura') # nakamura.hello # nakamura.admin_hello sato = AdminUser.new('Sato') sato.hello sato.admin_hello
メソッドの公開範囲
access.rb
class User def initialize(name) @name = name end def say hello end private def hello puts "Hello! I am #{@name}." end def hello2 end end nakamura = User.new('Nakamura') # nakamura.hello nakamura.say
モジュール
module.rb
# 自動車の運転者に関するモジュールの作成 # Runと出力するメソッド # Stopと出力するメソッド module Driver def self.run puts 'Run' end def self.stop puts 'Stop' end end Driver.run Driver.stop # driver = Driver.new # module TaxiDriver < Driver # end
例外と例外処理
exception.rb
puts '--- Please enter an integer. ---' i = gets.to_i begin puts 10 / i puts "begin's end" rescue => ex puts 'Error!' puts ex.message puts ex.class ensure puts 'end' end
【旧版:Rails5】はじめてのRuby on Rails入門
GitHubを参照してください:
>>こちらから
【旧版:Rails5】版ミニQ&Aアプリ
GitHubを参照してください:
注意事項
受講生の皆さんの個人的な学習にのみご利用いただけます。
営利・非営利問わず二次利用する行為を禁止します。