【Ruby入門】メソッド
  • facebookページ
  • twitterページ
  • 2017.12.19

    【Ruby入門】メソッド

    本記事ではメソッドを解説します。

    前記事のクラスやメソッドの記事で、すでにメソッドは出てきました。

    処理をまとめるという点では関数と似ていますが、それ以外はまったく異なります。

    本記事で順に解説していきます。

    (今後文脈に応じて、インスタンスとオブジェクトの両方を使います。オブジェクトの方がより広義と理解してください)

    メソッドとは

    メソッドとは、処理をまとめて外部から利用できるようにしたものです。関数と違うのは、メソッドはオブジェクトを操作するためのものです。

    レシーバ

    まずレシーバについて触れなければいけません。

    メソッドを実行するというのは、言い換えればオブジェクトに対してメッセージを送る、といえます。

    メッセージパッシングともいいます。ナントカさんコレよろしく、という感じでしょうか。

    数値の5を文字列に変えるには、数値の5に変換メソッドto_sというメッセージ送る、ということになります。

    数値の5がレシーバで、to_sがやってほしいことであるメッセージです。

    (Rubyの世界では、数値はおろかすべてのモノがオブジェクトでしたよね?)

    メソッドの呼び出し

    単純に呼び出す

    オブジェクトに属するメソッドを呼び出す場合は以下のとおりです。

    引数を取らないメソッドはカッコは不要です。

    前記事「【Ruby入門】クラスをコーディング(2) オブジェクト指向」で出てきた以下もそうです。

    bookというオブジェクトに、countしてくれというメッセージを送っています。countはメソッドです。

    関数的メソッド

    ではpは何なのか、と思いますよね。

    今まで散々でてきたpメソッドやputsメソッドは、レシーバなど意識せず普通に使ってきました。

    実はpもputsも、レシーバが不要なメソッドです。

    不要というより省略されているといったほうが正しいです。

    さらにカッコも省略されているので、メソッドのように見えないのです。

    これを関数的メソッドといいます。

    本命!プロックつきメソッド

    まず、これを見てください。

    doからendまでがブロックで、iはブロックパラメータです。

    [実行結果]

    3.timesは1,2,3と数値を順にブロックパラメータへ送ります。そしてputs iでそれを表示させています。

    3というオブジェクトに対してtimesというブロックを送っています。

    timesをRubyのマニュアルで調べてみましょう。

    以下のように書いています。

    self 回だけ繰り返します。 selfが正の整数でない場合は何もしません。またブロックパラメータには 0 から self – 1 までの数値が渡されます。

    この説明からも、timesに対してブロックを渡しているのがわかります。

    メソッドの分類

    メソッドは、大きく分けてインスタンスメソッドとクラスメソッドに分かれます。

    順に解説していきます。

    インスタンスメソッド

    前述の「単純に呼び出す」でも出てきたインスタンスメソッドです。

    「【Ruby入門】配列と操作(基本編)」に出てきたsplitを使って解説します。

    [実行結果]

    これは、“あああ, いいい (省略)”という文字列のレシーバに対してsplitしてください、引数はカンマで、というメッセージを送っています。

    文字列はStringクラスのオブジェクトということもお忘れなく。

    クラスメソッド

    レシーバがインスタンスではなくクラスのメソッドです。

    こういうと難しいのですが、単純にインスタンス化しなくとも使える、クラスに紐付いたメソッドと思えば十分です。

    特によく見るのはnewでしょうか。

    という記述をいたるトコロで見たかと思います。これもクラスメソッドです。

    クラスメソッドを呼び出すには、上記のようにクラス名にドット「.」で可能です。またドットの代わりに::も使えます。

    マニュアル類でよくみる表記 「#」

    マニュアル類では、クラス名#メソッド名で表記されている場合があります。

    しかしこれはマニュアル上での表現であり、実際にプログラム上で記述するとエラーになりますので注意しましょう。

    メソッドを作る

    メソッドを作りましょう。

    基本形は以下です。

    クラスの中に定義しなければ、クラスメソッドでもなくインスタンスメソッドでもない、関数的メソッドとなります。

    単純に空文字とゼロを渡すメソッドを作りましょう。

    [実行結果]

    引数の注意点

    引数は、省略した場合の初期値を設定できます。

    例えば省略した時には””(空文字)や0(ゼロ)を設定したいときはこうします。

    引数の数が決まらない場合は、*変数名で対応します。慣例的にargsを使うことが多いです。

    以降の解説でも*argsとしますが、基本的には自由です。

    これで、引数が配列としてまとめて受け取れます。

    少なくとも1つ以上必要な場合はこうします。

    最初と最後だけ指定して、間はいくつでも構わない場合はこうします。

    キーワード引数

    今まで解説してきたメソッドは、順番を合わす必要がありました。

    順番をまちがえればエラーになります。

    しかしキーワード引数を使うと、引数を指定して渡すことができるのでまちがうことがありません。

    商品の数量と単価を渡して、消費税込みの金額を得るメソッドを作ります。

    [実行結果]

    小数点以下は消すことができるのですが、本解説の範疇ではないので解説を省略します。

    これを、puts calctax(price: 10000, number: 3)としましょう。

    同じ結果が出ます。

    引数を逆にしても正常に動くことが確認できました。

    戻り値の明記は必須ではない

    もう一度、以下をごらんください。(再掲)

    他言語から来られた方は、return文がないのにお気づきでしょう。

    そうです、Rubyでは戻り値を示すreturn文は必須ではありません

    しかし書いたとしてもエラーになりません。

    最後に実行された結果が戻り値になる、というルールがありますので、覚えておきましょう。

    returnを使うと、以下のようになります。

    ただし明示的にreturnを示すこともあります。それは、強制的に終了するときです。

    負の数が来たときに、強制的に終了させてみました。

    まとめ

    本記事ではメソッドについて解説しました。

    どれも基本的な内容なので、ご自身で手を動かして確実に理解してくださいね!


    他のRuby入門記事はこちら

    【Ruby入門】Rubyとは何か?学習方法や将来性まで考えました!

    【Ruby入門】Ruby on Railsをやってみよう!

    【Ruby入門】環境構築(Mac/Win)

    【Ruby入門】nokogiriでスクレイピング

    【Ruby入門】データベース

    【Ruby入門】gemとライブラリ

    【Ruby入門】エラーと例外処理

    【Ruby入門】モジュール(module)とMix-in

    【Ruby入門】Procクラスとラムダ(lambda)

    【Ruby入門】ブロック

    【Ruby入門】メソッド

    【Ruby入門】クラスをコーディング(2) オブジェクト指向

    【Ruby入門】クラスをコーディング(1) classを作る

    【Ruby入門】クラスの継承、オーバーライド

    【Ruby入門】クラスとオブジェクト

    【Ruby入門】ディレクトリ(フォルダ)の作成、削除

    【Ruby入門】ファイルの移動、コピー、削除

    【Ruby入門】入力と出力

    【Ruby入門】Rubyの正規表現

    【Ruby入門】正規表現で置換する

    【Ruby入門】正規表現とは何か?

    【Ruby入門】文字列の結合などの操作

    【Ruby入門】CSVの基本と操作

    【Ruby入門】JSONの基本と操作

    【Ruby入門】乱数(Random)などの数値計算用クラスや端数処理

    【Ruby入門】日付の基本と操作(Time, Date)

    【Ruby入門】数値の数え上げ「upto」と四捨五入

    【Ruby入門】文字列の標準ライブラリnkfとヒアドキュメント

    【Ruby入門】数値の基本とメソッド (timesメソッド他)

    【Ruby入門】ハッシュ(hash)をeachで取り出す!その他ハッシュの応用に

    【Ruby入門】ハッシュ(hash)とシンボルの基本

    【Ruby入門】文字列の基本と表示メソッド

    【Ruby入門】Rubyの繰り返しを極める!様々な繰り返しのバリエーション

    【Ruby入門】最初はこれだけ!まずは手を動かしたい人のRuby入門

    【Ruby入門】ifとelseについて

    【Ruby入門】配列と操作(基本編)

    【Ruby入門】eachメソッドの使い方と応用例


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE