Rubyのデータ型について

前書き

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

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

通常、数学では、異なるタイプの数値を組み合わせて、何らかの答えを得ることができます。 たとえば、πに5を追加します。

5 + π

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

5 + π = 5 + 3.14 = 8.14

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

sky + 8

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

このチュートリアルでは、Ruby固有の最も重要なデータ型である整数、浮動小数点数、文字列、シンボル、配列、ハッシュについて学びます。 これは、データ型の網羅的な調査ではありませんが、プログラムで使用できるオプションを理解するのに役立ちます。

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

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

整数

数学のように、コンピュータープログラミングの_integers_は、正、負、または0(…、 + -1 ++ 0 ++ 1 +、…)の整数です。 整数は一般に「+ int +」としても知られています。

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

print -25
Output-25

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

my_int = -25
print my_int
Output-25

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

sum = 116 - 68
print sum
Output48

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

やってみよう:

large_number.rb

large_number = 1_234_567
print large_number

アンダースコアなしで整数が印刷されます:

Output1234567

アンダースコアを使用すると、プログラムで大きな数値を表す必要がある場合に、より読みやすいコードを作成できます。

Ruby言語について詳しく知ると、整数を扱う機会が増えます。 _実数を扱う方法を見てみましょう。

浮動小数点数

_floating-point number_または_float_は、_real_の数を表します。 実数は、有理数でも無理数でもかまいません。 「9.0」や「+ -116.42 +」など、小数部分を含む数字。 言い換えると、Rubyプログラムの浮動小数点数は、小数点を含む数値です。

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

print 17.3
Output17.3

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

my_float = 17.3
print my_float
Output17.3

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

sum = 564.0 + 365.24
print sum
Output929.24

Rubyで整数に浮動小数点数を追加すると、浮動小数点数が得られます。

sum = 564 + 365.24
print sum
Output929.24

Rubyは、小数部なしで記述された数値(+ 138 + `など)と小数部で記述された数値(+ 138.0 +`など)を整数とみなします。

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

ブールデータ型

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

数学の多くの操作は、trueまたはfalseに評価される答えを提供します。

  • より大きい

  • 500> 100 + true +

  • 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以下なので、次の結果が表示されます。

Outputfalse

Rubyでより多くのプログラムを作成すると、ブール値の仕組みと、「+ true 」または「 false +」のいずれかに評価されるさまざまな関数と操作がプログラムのコースを変更する方法に慣れます。

次に、プログラムでテキストを操作してみましょう。

文字列

_https://www.digitalocean.com/community/tutorials/how-to-work-with-strings-in-ruby [string] _は、文字、数字、記号などの1つ以上の文字のシーケンスです。 文字列は、主にRubyの単一引用符( + '+)または二重引用符( `+" + `)内に存在するため、文字列を作成するには、次のように文字列を引用符で囲みます。

"This is a string in double quotes."

単純なプログラム「https://www.digitalocean.com/community/tutorials/how-to-write-your-first-python-3-program[Hello、World!]」は、コンピュータープログラミングで文字列を使用する方法を示しています、フレーズ「+ Hello、World!+」を構成する文字は文字列であるため。

print "Hello, World!"

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

output = "Hello, World!"

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

print output
OutputHello, World!

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

データのリストを操作する必要がある場合があります。 アレイが便利なのはその場合です。

配列

_https://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby [array] _は、単一の変数内に複数の値を保持できます。 これは、値のリストを配列内に含めて、それらを反復処理できることを意味します。 配列内にある各アイテムまたは値は、_element_と呼ばれます。

配列は、コンマで区切られた角括弧 `+ [] +`の間の値を指定することによって定義されます。

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

[-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の配列は_mutable_です。つまり、値を追加したり、値を削除したり、配列のエントリを変更したりすることもできます。

時には、プログラム内の物にラベルを付ける方法が必要です。 それがシンボルの目的です。

シンボル

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

: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は_dynamictyping_を使用します。つまり、_statictyping_を使用する言語のように、コンパイル時ではなく実行時に型チェックが行われます。 Rubyは、変数に格納されているデータからデータ型を決定します。 これはhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3[Pythonのデータ型]およびhttps://www.digitalocean.com/community/tutorialsに類似しています。 / understanding-data-types-in-javascript [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 `メソッドはStringをFloatに変換します。 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"
OutputTypeError: String can't be coerced into Integer

このコードのように:

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

`+ 10 `を得るために数字を一緒に追加したい場合は、文字列を整数に変換します。 それらを連結して `" 55 "+`を取得する場合は、整数を文字列に変換します。

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

データ型の特定

Rubyでは、ほとんどすべてがオブジェクトです。 Integer、Float、Array、Symbol、およびHashはすべてRubyオブジェクトであり、それらはすべて「+ class 」と呼ばれるメソッドを持っています。 ブール値 ` true`および` + false`、および値 `+ 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

「+ class 」、「 kind_of?」、および「 is_a?+」を使用すると、適切な種類のデータを確実に操作できます。 Rubyの詳細を学習すると、データのタイプを明示的に確認する必要のない、データを処理する他の方法を見つけることができます。

結論

Rubyプログラムでは多くの異なるデータ型を使用します。 これで、Rubyプログラムで使用できる主要なデータ型についての理解が深まりました。

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