【Ruby入門】数を数えるlengthメソッドの使い方
  • facebookページ
  • twitterページ
  • 2021.03.27

    【Ruby入門】数を数えるlengthメソッドの使い方

    Rubyのlengthメソッドには、文字列の文字数を数える機能と配列の要素の数を数える機能とがあります。Rubyに限らずプログラムの中で数を数える処理はよく使われます。lengthメソッドはそのような場面で便利に使えるメソッドです。

    とはいえRubyには同じ機能で違う名称のメソッドがあります。また、Rubyには配列の要素を扱うメソッドが幾つもあり、それらを使えばlengthメソッドを使う必要はありません。今回は、lengthメソッドの詳細と、lengthメソッドに関連するメソッドの使い方について紹介します。

    Rubyのlengthメソッド

    Rubyの特徴は、他のプログラム言語に比べて短い記述で読み易いプログラムが書ける点です。そして特に配列や文字列を加工するのに便利な機能が充実しています。

    そのようなRubyでlenghメソッドと言えば、配列の数を調べるメソッドと文字列の長さを調べるメソッドのどちらかです。まずは、それぞれのlengthメソッドについて説明する前に、メソッドの基本とlengthの意味について説明します。

    Rubyで扱う要素は全て何ならのクラスに含まれる

    Rubyは、Webシステムの開発などに使われるオブジェクト指向のスクリプト言語です。そして、プログラムで使われる全ての変数やメソッドが、何らかのクラスに属している、という特徴を持っています。

    つまり、配列の数を数えるlengthメソッドは、配列クラスに定義されたメソッドです。一方、文字列の文字数を数えるlengthメソッドは、文字列クラスに定義されています。

    そのため配列と文字列のlengthメソッドは、同じ名称でますが、それぞれのクラスで別々に定義された別のメソッドです。名称が同じでも機能は全く違います。

    Rubyには同じ機能のメソッドが複数ある

    Rubyには同じ機能なのに別の名称のメソッドが使えたりします。そして今回紹介するlengthメソッドにも、同じ機能のメソッドがあります。それがsizeメソッドです。

    sizeメソッドは、配列クラスと文字列クラスの両方でlengthメソッドと同じ機能として定義されているので、両方で使えます。

    そもそもlengthとは何

    Rubyで使われるメソッドの名称として、その処理を示す英単語が使われています。今回紹介するlengthメソッドも元は英単語です。なお英語のlengthはlongの名詞形で、日本語の「長さ」という意味です。

    配列の長さ、または、文字列の長さ、と考えれば、lengthが使われた意味が分かるのではないでしょうか。

    文字列に対して使うlengthメソッド

    lengthメソッドを英語の長さの意味から連想すると、先に思いつくのは文字列の長さを調べるメソッドでしょう。まずは、文字列クラスの変数などに使用するlengthメソッドについて解説します。

    文字列クラスのlengthメソッド

    文字列クラスは、Rubyのプログラムで文字列を扱うための機能を提供するクラスです。そして文字列の長さを調べるメソッドがlengthです。使い方は簡単で変数に続けてドットで繋ぐだけで、引数はありません。lengthメソッドを適用すると、対象の文字列の文字数を返します。

    lengthメソッドの文法

    (文字列).length

    文字列にlengthメソッドを適用した例

    sizeメソッドも同じ

    先ほど紹介したように文字列の変数などに含まれる文字数を返すメソッドはlengthだけではありません。文字列クラスにはsizeメソッドも定義されており、機能と使い方はlengthメソッドと同じです。

    sizeメソッドの文法

    (文字列).size

    文字列にsizeメソッドを適用した例

    かな漢字も1文字と数える

    Rubyに限らず日本語のカナや漢字を扱う場合、それらが全角文字である点に注意してください。というのは、半角のアルファベットや数字は1文字が1バイトです。そのため文字列を扱う関数が半角のアルファベットを前提に作られていることがよくあります。

    しかし、Rubyの文字列を扱うlengthメソッドは、かなや漢字などの全角文字を1文字として扱います。全角の文字と半角のアルファベットが混在していても問題ありません。

    なお、プログラムによっては文字列のバイト数を計算するケースもあります。この場合、バイト数は文字数ではありあません。そしてRubyにはバイト数を求める専用のbyteslice関数があるので、そちらを利用してください。

    配列に対して使うlengthメソッド

    先ほど文字列クラスに定義されたlengthメソッドを説明しましたが、lengthメソッドは配列クラスにも定義されています。先ほど説明したようにRubyのメソッドはクラス毎に定義されているので、配列クラスのメソッドは先ほどの文字列クラスのメソッドとは別のものです。

    次から配列の要素の数を調べるlengthメソッドについて紹介します。

    配列の個数を調べるlengthメソッド

    配列は繰り返し処理と相性が良いことから、プログラムの中でよく利用される変数です。特にRubyには配列を操作する便利なメソッドが多く、データベースから取得したデータを扱うケースなどでよく利用されています。そして、そのような配列の個数を調べるメソッドがlengthです。

    lengthメソッドの文法

    (配列).length

    lengthメソッドは、配列に含まれる要素の個数を返します。

    配列のlengthメソッドの使用例

    配列の個数はsizeメソッドでも調べられる

    文字列の長さを数えるメソッドには、lengthメソッドとsizeメソッドがあり、使い方は同じだと説明しました。配列の個数についてもsizeメソッドが使えます。そして、sizeメソッドの使い方は、lengthメソッドと同じです。

    sizeメソッドの文法

    (配列).size

    sizeメソッドは、配列に含まれる要素の個数を返します。

    配列のlengthメソッドの使用例

    配列には便利なメソッドが多い

    Rubyに限らず配列は繰り返し処理でよく使われます。他のプログラム言語を学んだ方の中には、配列の数だけ繰り返し処理をやれば良い、と考える方がいるかもしれません。

    しかし、Rubyには配列を操作する便利なメソッドがたくさんあります。もしRubyで配列の要素を扱うプログラムを作るのなら、そのようなメソッドを活用してください。

    Rubyの配列を使った例

    また、配列クラスのeachメソッドを利用して、ブロック内に複雑な処理を記述することも可能です。

    eachメソッドの例

    この例は配列arrの要素をチェックし、2,3,5で割り切れる数を算出する処理です。このようにRubyではlengthメソッドで配列の数を算出しなくても、配列を使った繰り返し処理を作れるので、要素を調べたり加工することが可能です。

    配列のlengthと似ているcountメソッド

    先ほど説明したように配列クラスのlengthメソッドは配列の要素の数を返しますが、Rubyではそれと似た機能のcountメソッドも使えます。

    countメソッドは、ブロックで指定した条件に一致する配列の要素の数を調べるメソッドです。そして、条件を指定しなかった場合はlengthメソッドと同じく要素の数をます。

    countメソッドの使い方

    (配列).count 条件

    条件には、()で引数として指定する方法と、ブロックで処理を指定する方法が使用できます。

    countメソッドの例

    まとめ

    これまで紹介したようにlengthメリットは、文字列の文字数を調べたり、配列の要素の数を調べるメソッドです。実際にはそれぞれが別のクラスに属するでので、同じ名称ですが機能は全く違います。

    また、それぞれのlengthメソッドには同じ機能のメソッドがあり、それがsizeメソッドです。なお、Rubyには配列の要素を扱うメソッドがたくさんあるので、lengthメソッドを使わなくても繰り返し処理が可能です。lengthメソッドの使い方だけでなく、そのような使い方もマスターしてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

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









    ABOUT US

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

    READ MORE