Rubyの特徴(概要)
インタプリタ型言語
日本人のまつもとゆきひろさんが作った言語
オブジェクト指向言語
構文の自由度が高い
Ruby on Railsというフレームワークがある
irbを使うと双方向的なやり取りができる 2.5.1 :001 > s = 'hello, World!' => "hello, World!" 2.5.1 :002 > puts s hello, World! => nil 2.5.1 :003 > n = 10 * 2 => 20 2.5.1 :004 > puts n 20 => nil
pryを使ってもできる
↓変数に初期値を入れないとエラーになる 2.5.1 :005 > i Traceback (most recent call last): 2: from /home/ec2-user/.rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>' 1: from (irb):5 NameError (undefined local variable or method `i' for main:Object)
変数にnilを入れることもできる
2.5.1 :006 > i = nil => nil
予約語は使えないので注意 if elsif など
良くない変数の使い方
変数に複数入れる
x = 'abc' => "abc" 2.5.1 :002 > x = 123 => 123 2.5.1 :003 > x = 'def' => "def" 2.5.1 :004 > x = [1,2,3] => [1, 2, 3] 2.5.1 :005 > i, j =1, 2 => [1, 2] 2.5.1 :006 > i => 1 2.5.1 :007 > j => 2 2.5.1 :008 > a = b = 10 => 10 2.5.1 :009 > a => 10 2.5.1 :010 > b => 10
定数は全て大文字で変化しないものや頻繁に変わらない値などにする
(手数料率、消費税率、バージョン、デフォルトの価格、円周率など)
定数への代入は一度きりでまた代入すると警告文が表示されるが
再代入できてしまうので注意!
リテラルとは
数値の123 文字列の’Hello World’など
Rubyのプログラムの中に直接記述できる値のことをリテラルと言う
他にも↓などがある
・配列[1,2,3]
・ハッシュ (連想配列){ ‘red’ => ‘#ff0000’}
オブジェクト指向プログラミング言語の概要
オブジェクトとは
・データと処理の集まりのこと
オブジェクト指向とは
・オブジェクト同士が相互に関係しあうことで
システムの振る舞いを捉える考え方
クラスとは
オブジェクトの設計図
インスタンスとは
・クラス(設計図)から作成した、実態でオブジェクト≒インスタンス
メソッドとは
・クラスの中に定義されているもので、
複数の処理を一つにまとめて、扱いやすくしたもの。
・クラスに所属する関数のようなもの
動的型付けとは?
変数に値を代入する時に、動的型付けがされる
・変数の型指定を変数の宣言時に行わなくていいということ
OK: i =1
NG: int i = 0
小数点がついてないと↓正しく計算されないので注意
2.5.1 :012 > 3 / 2 => 1 2.5.1 :013 > 3.0 / 2 => 1.5 2.5.1 :015 > 3 / 2.0 => 1.5 2.5.1 :016 > 3.0 / 2.0 => 1.5 10 ** 3 => 1000
fはfloatで小数点を扱う時に使う↓ x = 3 => 3 2.5.1 :020 > x.to_f => 3.0 2.5.1 :021 > x.to_f / 2 => 1.5 2.5.1 :022 > x / 2 => 1 x / y.to_f => 1.5
classをつけることでオブジェクトがなんのクラスかわかる
1.class => Integer 2.5.1 :027 > 1.1.class => Float 使える機能がわかる 1.methods => [:-@, :**, :<=>, :upto, :<<, :<=, :>=, :==, :chr, :===, :>>, :[], :%, :&, :inspect, :+, :ord, :-, :/, :*, :size, :succ, :<, :>, :to_int, :coerce, :divmod, :to_s, :to_i, :fdiv, :modulo, :remainder, :abs, :magnitude, :integer?, :numerator, :denominator, :to_r, :floor, :ceil, :round, :truncate, :gcd, :to_f, :^, :odd?, :even?, :allbits?, :anybits?, :nobits?, :downto, :times, :pred, :pow, :bit_length, :digits, :rationalize, :lcm, :gcdlcm, :next, :div, :|, :~, :+@, :eql?, :singleton_method_added, :i, :real?, :zero?, :nonzero?, :finite?, :infinite?, :step, :positive?, :negative?, :arg, :rectangular, :rect, :real, :imag, :abs2, :imaginary, :angle, :phase, :conjugate, :to_c, :polar, :conj, :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, :method, :public_method, :singleton_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, :taint, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :singleton_methods, :methods, :private_methods, :protected_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__]
‘(シングルクォート)と”(ダブルクォート)の違い
改行される↓ puts "ruby\nProgramming" ruby Programming => nil 2.5.1 :031 > puts 'ruby\nProgramming' ruby\nProgramming ↑されない
puts "My name is #{first_name} #{last_name}." My name is suzutuki aki. => nil 2.5.1 :036 > puts 'My name is #{first_name} #{last_name}.' My name is #{first_name} #{last_name}. => nil
つまりどういうこと?
特殊文字や式展開するときは””
それ以外は”を使う!
.upcaseは全て大文字で出力される
'Hello, World!' => "Hello, World!" 2.5.1 :042 > puts s.upcase HELLO, WORLD! => nil 破壊的メソッド s.upcase! => "HELLO, WORLD!" 2.5.1 :045 > s 変数sがすべて大文字に変わってしまった! slice => "HELLO, WORLD!" 'Hello, World!'.slice(0, 3) =>"HEL" 'Hello, World!'.slice(3, 2) =>"lo"
.downcase(全て小文字にする)
.size(文字列の長さが出力される)などもある
空白文字 ↓このようにすることもできるが見にくいのでNG 10 + 2 - 1
比較演算子 演算子は記号のこと 1 < 2 => true 2.5.1 :049 > 1 <= 2 => true 2.5.1 :050 > 1 > 2 => false 2.5.1 :051 > 1 == 1 => true 2.5.1 :052 > 1 != 2 => true
演算子の優先順位 リファレンスより 高い :: [] +(単項) ! ~ ** -(単項) * / % + - << >> & | ^ > >= < <= <=> == === != =~ !~ && || .. ... ?:(条件演算子) =(+=, -= ... ) not 低い and or
数値と文字列は暗黙的に変換されない
1 + '1' Traceback (most recent call last): 2: from (irb#1):53 1: from (irb#1):53:in `+' TypeError (String can't be coerced into Integer)
このようにすれば計算できる
2.5.1 :054 > 1 + '1'.to_i => 2 1 + '1.1'.to_f => 2.1 'Number is' + number.to_s => "Number is1"
インクリメントとデクリメント += -=
RubyやJavaScriptなどである ++ — はないよ
n = 1 => 1 n = n + 1 => 2 n += 1 => 3 n = n-1 => 2 n -= 1 => 1