0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyの構文まとめ

Last updated at Posted at 2020-09-03

#三項演算子(条件演算子)

? trueの時の処理:falseの時の処理

#Case構文

case 対象のオブジェクトや式
when 値1
 #値1の場合の処理 then 
when 値2 then #値2が真だった場合の処理(thenを使うと一行で済む)  
else
 #どれにも一致しない場合の処理
end

・最後に評価された式が戻り値になるので、結果を変数にいれることも可能
・whenの後の値には、:japanなどのハッシュでも可。

#クラス

class クラス名(最初の文字は大文字。キャメルケース)
end

・Rubyでは単一継承を採用しているため、一つのクラスは一つのスーパークラスしか持てない。
・クラスでモジュールをincludeすると、モジュールで定義したメソッドがインスタンスメソッドとして呼び出せるようになる。
・モジュールをクラスにincludeやextendして機能追加することをミックスインといい、これで多重継承と似た仕組みを実現できる。includeはインスタンスメソッド、extendは特異メソッド(クラスメソッド)として呼び出しが可能なので、クラス構文直下で呼び出したい時はextend。
・クラスはclassクラスのインスタンス(オブジェクト)。Objectクラスを継承するModuleクラスを継承している。

#####・includeしたモジュールの確認方法

> User.include?(モジュール名) 
 => #true or falseが返る
> User.included_module 
 => [Kernel] #includeされているモジュールが配列で返る
> User.ancestors
 => [Bank, Object, Kernel, BasicObject] #モジュールとスーパークラスが返る

#モジュール

module モジュール名
 モジュールの定義。メソッドや定数など
end

・クラスと違いモジュールからインスタンスは作成不可。(user = User.newでエラーが出る)
・他のモジュールやクラスは継承不可。is-aの関係が成り立たないので継承はできないが、共通機能はもたせたい..という時に使用する。
・クラスでミックスインする場合は、publicにする必要がない場合は、モジュール側でprivateにしておくと良き。
・モジュールのselfはinclude先のインスタンスになる為、includeされた先のクラスにpriceメソッドがあればモジュール側でもpriceが呼び出せる
・Rubyでいつでもputsやloopメソッドなどが使えるのは、実質全クラス頂点のObjectクラスがKarnelモジュールをincludeしている為。(Karnelモジュールの中身)
・モジュールはmoduleクラスのインスタンス。Objectクラスを継承している。

#例外処理

一番basicな構文.
begin
 #例外が起き得る処理
rescue
 #例外が発生した場合の処理
end

ensure&else.
begin
 #例外が起き得る処理
 (#例外が発生しなかった場合の処理をここに書いてもいいのでelseは不要な場合が多い)
(rescue)
 (#例外が発生した場合の処理。)
(else)
 #例外が発生しなかった場合の処理
(ensure)
 #例外の有無に関わらず必ず実行する処理
end

・rescueは必須ではない。異常終了してもいいが、終了する前にやりたい処理がある場合などはensureだけでも可
・ただし、openメソッドにブロックを渡したりなど、「使用したら必ずソースを解放する」などの場合はブロック付きメソッドを使うことで自動処理できる場合が多い為、ensureメソッドの出番は少ないかも。

def メソッド名
 case object
 when :japan
  'yen'
 when :us 
  'dollar'
 else
  raise "エラーメッセージ" 
  #=> RuntimeError: "エラーメッセージ"
  #特に何も指定しないとRuntimeErrorが呼び出される。
 end
end

・RuntimeError以外を呼び出したい場合は、以下参照
raise ArgumentError, "エラーメッセージ"
raise ArgumentError.new("エラーメッセージ")

#ブロック
処理の塊。Procでブロックをオブジェクト化できる
Rubyではメソッドを呼び出す際にブロックを使用できる。

#メソッドまとめ

1 2
chomp 改行文字を削除
scan
message
size(length)
open
inject
reject
brock.given? ブロックが渡されている場合にtrueを返す
0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?