Rubyのまとめ1( 概要から演算子,インクリメントまで)

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

2に続く

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です