序章

プログラムを作成するときは、データ型を使用してデータを分類します。 データ型は、プログラムでデータを処理する方法をコンピューターに指示します。 また、実行できる操作など、データで何ができるかを決定します。

データ型について考える1つの方法は、現実の世界で使用するさまざまな種類のデータを検討することです。 たとえば、整数(0、1、2、…)、整数(…、-1、0、1、…)、および無理数(π)を使用します。

通常、数学では、さまざまな種類の数字を組み合わせて、ある種の答えを得ることができます。 たとえば、πに5を追加したい場合があります。

5 + π

無理数を説明するための答えとして方程式を保持するか、またはπを小数点以下の桁数が短い数に丸めてから、数を合計することができます。

5 + π = 5 + 3.14 = 8.14 

しかし、単語などの別のデータ型で数値を評価しようとすると、物事はあまり意味をなさなくなり始めます。 次の方程式をどのように解きますか?

sky + 8

これは、私たちがすぐに解決する方法を知っているものではありません。 データが2つの異なるタイプであるため、コンピューターもできません。 「空」は単語で、8は整数です。 プログラムを作成するときは、値を割り当てる方法と、加算、減算、乗算などの操作を通じて値を操作する方法に注意する必要があります。

このチュートリアルでは、Rubyにネイティブな最も重要なデータ型(整数、浮動小数点数、文字列、シンボル、配列、ハッシュ)について学習します。 これはデータ型の徹底的な調査ではありませんが、プログラムで利用できるオプションを理解するのに役立ちます。

次に、動的型付けについて説明します。 Rubyプログラムは、変数に含まれる内容に基づいてデータ型を決定するため、動的型付けがどのように機能するかを理解すると、独自のプログラムでの厄介な状況を回避するのに役立ちます。 また、変数には任意の値を含めることができるため、変数のデータ型を識別する方法を学習します。

Rubyで整数を操作する方法を見てみましょう。

整数

数学と同様に、コンピュータープログラミングの整数は、正、負、または0の整数です(…、-101、 …)。 整数は、一般にintとも呼ばれます。

次のような整数を出力できます。

print -25
Output
-25

整数を変数に格納し、変数を参照して値を出力することもできます。

my_int = -25
print my_int
Output
-25

整数で数学をすることもできます。 たとえば、2つの数値の合計を計算して、結果を出力できます。

sum = 116 - 68
print sum
Output
48

大きな数字を書き出すときは、読みやすくするためにコンマを使用する傾向があります。 たとえば、「100万」の場合は1,000,000と記述します。 コードでコンマを使用することはできませんが、Rubyではアンダースコア(_)文字を使用して大きな数を読みやすくすることができます。

やってみよう:

large_number.rb
large_number = 1_234_567
print large_number

下線なしで整数が出力されます。

Output
1234567

プログラムで多数を表す必要がある場合は、下線を使用すると、より読みやすいコードを記述できます。

Ruby言語についてさらに学ぶにつれて、整数を操作する機会がさらに増えます。 実数の操作方法を見てみましょう。

浮動小数点数

浮動小数点数または浮動小数点数は、実数数を表します。 実数は、有理数または無理数のいずれかになります。 9.0-116.42などの小数部分を含む数値。 つまり、Rubyプログラムのfloatは、小数点を含む数値です。

整数を出力するのと同じように、Rubyでfloatを出力できます。

print 17.3
Output
17.3

変数を宣言してfloatを割り当てることもできます。

my_float = 17.3
print my_float
Output
17.3

また、整数の場合と同様に、Rubyでもfloatを使用して数学を行うことができます。

sum = 564.0 + 365.24
print sum
Output
929.24

Rubyで整数にfloatを追加すると、floatが得られます。

sum = 564 + 365.24
print sum
Output
929.24

Rubyは、小数点なしで書き込まれた数値を整数(138のように)と見なし、小数点付きで書き込まれた数値を浮動小数点数(138.0のように)と見なします。

次に、Rubyのブール値を見てみましょう。

ブールデータ型

ブール値は、コンピューターサイエンスのアルゴリズムに情報を提供する、数学の論理ブランチに関連付けられている真理値を表すために使用されます。 Rubyでは、このデータ型をtrueまたはfalseの2つの値のいずれかで表します。

数学の多くの演算は、真または偽のいずれかに評価される答えを私たちに与えます。

    • より大きい500>100true 1> 5 false
  • 未満
      200 <400 true 4 <2 false
  • 等しい
      5= 5 true 500 = 400 false

数値と同様に、trueまたはfalseの値を変数に格納できます。

result = 5 > 8

次に、print()関数を呼び出して、ブール値を出力できます。

print result

5は8以下なので、次の結果が表示されます。

Output
false

Rubyでより多くのプログラムを作成するにつれて、ブール値がどのように機能するか、およびtrueまたはfalseのいずれかに評価されるさまざまな関数や操作がプログラムのコースをどのように変更できるかを理解するようになります。

次に、プログラムでテキストを操作する方法を見ていきましょう。

文字列

文字列は、文字、数字、記号などの1つ以上の文字のシーケンスです。 文字列は主に、Rubyでは一重引用符(')または二重引用符(")内に存在するため、文字列を作成するには、次のように文字のシーケンスを引用符で囲みます。

"This is a string in double quotes."

簡単なプログラム「Hello、World!」は、フレーズHello, World!を構成する文字が文字列であるため、コンピュータープログラミングで文字列を使用する方法を示しています。

print "Hello, World!"

他のデータ型と同様に、文字列を変数に格納できます。

output = "Hello, World!"

そして、変数を呼び出して文字列を出力します。

print output
Output
Hello, World!

数値と同様に、文字列を操作して目的の結果を達成するために、プログラム内の文字列に対して実行できる操作は多数あります。 文字列は、ユーザーに情報を伝達するため、およびユーザーがプログラムに情報を伝達するために重要です。

データのリストを操作する必要がある場合があります。 そこで、アレイが役に立ちます。

配列

array は、単一の変数内に複数の値を保持できます。 これは、配列内に値のリストを含めて、それらを反復処理できることを意味します。 配列内にある各項目または値は、要素と呼ばれます。

配列は、角かっこ[ ]の間にコンマで区切って値を指定することで定義されます。

整数の配列は次のようになります。

[-3, -2, -1, 0, 1, 2, 3]

フロートの配列は次のようになります。

[3.14, 9.23, 111.11, 312.12, 1.05]

文字列のリストは次のとおりです。

['shark', 'cuttlefish', 'squid', 'mantis shrimp']

他のデータ型と同様に、配列を変数に割り当てることができます。

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']

変数を出力すると、出力は作成した配列とまったく同じになります。

print sea_creatures
['shark', 'cuttlefish', 'squid', 'mantis shrimp']

0から始まるインデックス番号を使用して、配列内の個々の要素にアクセスします。

puts sea_creatures[0]  # shark
puts sea_creatures[2]  # squid

最後の値を出力するには、インデックス-1を使用できます。 Rubyには、最初と最後のエントリを取得するための.firstメソッドと。lastメソッドも用意されています。

puts sea_creatures.first  # shark
puts sea_creatures.last   # mantis shrimp

Rubyの配列には、さまざまな種類のデータを含めることができます。 文字列、記号、さらには他の配列を配列に格納できます。

record = [ 
  :en, 
  "Sammy", 
  42, 
  [
    "coral",
    "reef"
  ]
]

Rubyの配列は可変です。つまり、値を追加したり、値を削除したり、配列のエントリを変更したりすることもできます。

プログラム内で物事にラベルを付ける方法が必要になる場合があります。 それがシンボルの目的です。

記号

symbol は、Rubyプログラムのラベルまたは識別子のように機能する特別なデータ型です。 シンボルは不変であり、変更できないことを意味します。 シンボルは、値のない変数宣言のように見えます。 シンボルの例を次に示します。

:time_zone

Rubyでは、通常、重要なものを識別するために記号を使用しますが、操作または操作する必要のあるテキストには文字列を使用します。 Rubyプログラムの各文字列は、文字列が同一であっても、メモリ内で独自の場所を持つ独自のオブジェクトです。

ただし、同じシンボルを複数回参照する場合は、プログラム内のあらゆる場所で同じオブジェクトを参照していることになります。つまり、同じメモリ位置を参照していることになります。

キーを値に関連付けることができるハッシュを見ると、この概念が実際に機能していることがわかります。

ハッシュ

hash は、辞書のようなキーと値のコレクションです。 これらのキーと値のペアは、データを保存してアクセスするための便利な方法を提供します。 ハッシュは、ユーザーに関する情報など、関連するデータを保持するためによく使用されます。 次のようにハッシュを定義します。

{"first_name" => "Sammy", "last_name" => "Shark"}

他のデータ型と同じように、変数にハッシュを割り当てることができます。

user = {"first_name" => "Sammy", "last_name" => "Shark"}

userハッシュから値を取得するには、値のキーを使用します。

print user["first_name"]  # "Sammy"
print user["last_name"]   # "Shark"

文字列の代わりに、ハッシュのキーとして記号を使用できます。

user = {:first_name => "Sammy", :last_name => "Shark"}

可能な限り、シンボルをハッシュキーとして使用することをお勧めします。 シンボルのすべてのインスタンスは同じオブジェクトを指しますが、文字列の各インスタンスは一意のオブジェクトを参照します。 キーとして記号を使用すると、パフォーマンスがわずかに向上し、メモリ使用量が少なくなります。

記号をキーとして使用する場合は、記号を使用して値を取得します。

print user[:first_name]  # "Sammy"
print user[:last_name]   # "Shark"

ハッシュを定義するときに、わずかに異なる構文を使用することもできます。

user = {first_name: "Sammy", last_name: "Shark"}

この構文は、JavaScriptや他の言語で使用されている構文に似ています。 この構文では、キーをシンボルとして定義しているため、文字列"first_name"および"last_name"の代わりに、:first_nameおよび:last_nameを使用してエントリにアクセスします。

いくつかのデータ型を見てきましたので、Rubyがそれらの型でどのように機能するかを見てみましょう。

動的型付け

Rubyでは、値を割り当てる前にデータ型を明示的に宣言しません。 値を割り当てると、データ型が決まります。 Rubyは動的型付けを使用します。つまり、静的型付けを使用する言語のように、型チェックはコンパイル時ではなく実行時に行われます。 Rubyは、変数に格納されているデータからデータ型を判別します。 これは、Pythonデータ型およびJavaScriptデータ型に似ています。

次の例の変数tは、使用可能な任意のデータ型に設定できます。

t = 42        # t is an Integer
t = "Sammy"   # t is a String
t = :sammy    # t is a Symbol
t = true      # t is a boolean (true)
t             # t is nil

動的型付け言語を使用すると、既存の変数を再利用してさまざまなデータ型を保持できます。

これは、データをあるタイプから別のタイプに変換するときに役立ちます。 たとえば、ユーザーに数値を要求する次のコードがあるとします。

print "Please enter the length of the room: "
length = gets.chop

キーボードから取得するデータは常に文字列であるため、数学演算を実行するには、length変数のデータを数値に変換する必要があります。 静的に型付けされた言語では、変数に値を割り当てる前に変数のデータ型を宣言する必要があるため、変換されたデータを保持するための新しい変数が必要になります。 ただし、Rubyでは動的に型指定されるため、必要に応じてlength変数を再利用できます。

# Convert the amount to a Float.
length = length.to_f

to_fメソッドは、文字列をフロートに変換します。 Rubyには、文字列を整数に変換するto_iメソッドも用意されており、ほとんどのオブジェクトはto_sメソッドを使用して文字列に変換できます。

42.to_s                    # "42"
(42.5).to_s                # "42.5"
["Sammy", "Shark"].to_s    # "[\"Sammy\", \"Shark\"]"

Rubyは動的に型付けされますが、同じ型に変換せずに異なる型のデータに対して操作を実行することはできません。 たとえば、次のコードはエラーになります。

print 5 + "5"
Output
TypeError: String can't be coerced into Integer

このコードもそうです:

print "5" + 5
Output
TypeError: no implicit conversion of Integer into String

10を取得するために数値を合計する場合は、文字列を整数に変換します。 それらを連結して"55"を取得する場合は、整数を文字列に変換します。

動的型付けには柔軟性がありますが、1つの欠点は、変数に使用可能な任意の型を含めることができるため、操作しているデータの種類を常に確認できるとは限らないことです。 Rubyは、データのタイプを識別する方法を提供します。

データ型の識別

Rubyでは、ほとんどすべてがオブジェクトです。 Integer、Float、Array、Symbol、およびHashはすべてRubyオブジェクトであり、それらはすべてclassと呼ばれるメソッドを持っており、それらがどのタイプであるかを示します。 ブール値truefalse、および値nilもオブジェクトです。 自分で試してみてください:

42.class                   # Integer
(42.2).class               # Float
["Sammy", "Shark"].class   # Array
true.class                 # TrueClass
nil.class                  # NilClass

さらに、kind_of?メソッドを使用して、次のような特定のタイプのデータを検証できます。

42.kind_of?(Integer)    # true

これは、変数があり、そのタイプを判別する場合に特に便利です。

# somewhere in the code...
sharks = ["Hammerhead", "Tiger", "Great White"]
...
# somewhere else...

sharks.kind_of?(Hash)   # false
sharks.kind_of?(Array)  # true

これを使用して、外部ソースからのデータが正しいことを確認することもできます。

if data.kind_of? String
  data = data.to_f
end

Rubyはis_a?メソッドも提供します。これは、kind_of?と同じことを行いますが、一部の開発者にとっては少し読みやすいかもしれません。

if data.is_a? String
  data = data.to_f
end

classkind_of?、およびis_a?を使用すると、適切な種類のデータを確実に処理できます。 Rubyについて詳しく学ぶと、データの型を明示的にチェックする必要のない、データを処理する他の方法を発見するでしょう。

結論

Rubyプログラムではさまざまなデータ型を使用します。 これで、Rubyプログラムで使用できる主要なデータ型について理解を深めることができます。

これらのチュートリアルを見て、Rubyのデータ型の調査を続けてください。