紹介
プログラムを書くとき、データを分類するためにデータ型を使用します。データ型は、プログラム内のデータの処理方法をコンピュータに伝えます。また、データを操作できる内容や、実行できる操作を決定します。
データ型を考える方法の一つは、現実世界で使用するさまざまなタイプのデータを考えることです。例えば、整数 (0、1、2、…)、整数 (…、-1、0、1、…)、無理数 (π) を使用します。
通常、数学では異なるタイプの数を組み合わせ、ある種の答えを得ることができます。例えば、πに5を加えたいとします:
5 + π
この方程式を無理数を考慮したまま答えに保持するか、πを小数点以下の桁数が少ない数に丸めてから数値を加えるかを選択できます:
5 + π = 5 + 3.14 = 8.14
しかし、単語など別のデータ型の数値を評価しようとすると、意味がわからなくなります。次の方程式をどのように解決すればよいでしょうか?
sky + 8
これはすぐに解決できるものではありません。コンピュータもできません。なぜなら、データが2つの異なるタイプであるからです。”Sky”は単語であり、8
は整数です。プログラムを書く際には、値を割り当てる方法や、加算、減算、乗算などの操作を通じてそれらを操作する方法に注意する必要があります。
このチュートリアルでは、Ruby固有の最も重要なデータ型について学びます:整数、浮動小数点数、文字列、シンボル、配列、ハッシュです。データ型の徹底的な調査ではありませんが、プログラムで利用可能なオプションに慣れるのに役立ちます。
次に、動的型付けを探求します。Rubyプログラムは変数が何を含んでいるかに基づいてデータ型を決定するため、動的型付けの仕組みを理解することで、自分自身のプログラムでトリッキーな状況を避けるのに役立ちます。また、変数には任意の値を含めることができるため、変数のデータ型を特定する方法も学びます。
まずは、Rubyで整数を扱う方法を見てみましょう。
整数
数学のように、コンピュータプログラミングにおける整数は、正、負、または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 = 1_234_567
print large_number
アンダースコアなしで整数が表示されます:
Output1234567
アンダースコアを使うと、プログラムで大きな数を表す必要がある場合に、より読みやすいコードを書くことができます。
Ruby言語について学び続けると、整数を扱う多くの機会があります。次に、実数の操作方法を見てみましょう。実数
浮動小数点数
A floating-point number or a float represents a real number. Real numbers can be either a rational or an irrational number; numbers that contain a fractional part, such as 9.0
or -116.42
. In other words, a float in a Ruby program is a number that contains a decimal point.
Rubyでは、整数と同様に浮動小数点数を表示できます:
print 17.3
Output17.3
変数を宣言して浮動小数点数を代入することもできます:
my_float = 17.3
print my_float
Output17.3
また、整数と同様に、Rubyでは浮動小数点数でも計算できます:
sum = 564.0 + 365.24
print sum
Output929.24
Rubyでは、整数に浮動小数点数を加えると、浮動小数点数が得られます:
sum = 564 + 365.24
print sum
Output929.24
Rubyは、小数点がない数を整数(138
など)とし、小数点がある数を浮動小数点数(138.0
など)と見なします。
次に、Rubyでブール値を見てみましょう。
ブールデータ型
ブールは、数学の論理分野に関連する真偽値を表すために使用され、これはコンピュータサイエンスのアルゴリズムに情報を提供します。Rubyでは、このデータ型をtrue
またはfalse
のいずれかの値で表します。
数学の多くの操作は、真または偽に評価される答えを提供します:
- greater than
- 500 > 100
true
- 1 > 5
false
- less than
- 200 < 400
true
- 4 < 2
false
- equal
- 5 = 5
true
- 500 = 400
false
数字と同様に、true
またはfalse
の値を変数に格納できます:
result = 5 > 8
その後、print()
関数を呼び出してブール値を表示できます:
print result
5が8よりも大きくないため、次の結果が表示されます:
Outputfalse
Rubyでプログラムを書くにつれて、ブールの動作やtrue
またはfalse
に評価されるさまざまな関数や操作がプログラムの進行を変える方法についてより理解が深まります。
次に、プログラム内でテキストを扱う方法を探ってみましょう。
文字列
A string is a sequence of one or more characters, such as letters, numbers, and symbols. Strings primarily exist within either single quotes ('
) or double quotes ("
) in Ruby, so to create a string, enclose a sequence of characters in quotes, like this:
"This is a string in double quotes."
小さなプログラム「Hello, World!」は、コンピュータプログラミングで文字列がどのように使用されるかを示しています。Hello, World!
というフレーズを構成する文字は文字列です。
print "Hello, World!"
他のデータ型と同様に、文字列を変数に格納することができます:
output = "Hello, World!"
そして、変数を呼び出して文字列を出力できます:
print output
OutputHello, World!
数字と同様に、プログラム内で文字列に対して行うことができる多くの操作があり、それらを操作して求める結果を得るために文字列を操作できます。文字列はユーザーに情報を伝えるために重要であり、ユーザーがプログラムに情報を伝えるためにも重要です。
時折、データのリストで作業する必要があります。それが配列の役立つところです。
配列
配列は単一の変数内に複数の値を保持できます。これにより、配列内に値のリストを含め、それらを反復処理できます。配列内の各アイテムまたは値は要素と呼ばれます。
配列は角かっこ[ ]
で指定された値で定義され、コンマで区切られます。
整数の配列は次のようになります:
[-3, -2, -1, 0, 1, 2, 3]
A array of floats looks like this:
[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] # シャーク
puts sea_creatures[2] # イカ
最後の値を出力するには、インデックス-1
を使用できます。Rubyには、最初のエントリーを取得する.first
メソッドと、最後のエントリーを取得する.last
メソッドも提供されています。
puts sea_creatures.first # シャーク
puts sea_creatures.last # シャコ
Rubyの配列にはさまざまな種類のデータを含めることができます。文字列、シンボル、さらには他の配列を配列内に格納することができます:
record = [
:en,
"Sammy",
42,
[
"coral",
"reef"
]
]
Rubyの配列は変更可能であり、つまり、値を追加したり、削除したり、配列内のエントリーを変更したりすることができます。
時には、プログラム内の物事にラベルを付ける方法が必要です。それがシンボルの役割です。
シンボル
A symbol is a special data type that acts like a label or an identifier in a Ruby program. Symbols are immutable, which means that they cannot be changed. A symbol looks like a variable declaration without a value. Here’s an example of a symbol:
:time_zone
Rubyでは、重要なものを識別するためには通常シンボルを使用し、操作や変更が必要なテキストには文字列を使用します。Rubyプログラムの各文字列は、同じであっても、独自のメモリ上の場所を持つ独自のオブジェクトです。
ただし、同じシンボルを複数回参照する場合、プログラム全体で同じオブジェクトを参照していることになり、同じメモリ上の場所を参照しています。
この概念は、キーと値を関連付けることができるハッシュを見ていくと実際に確認できます。
ハッシュ
A hash is a dictionary-like collection of keys and values. These key-value pairs provide a useful way to store and access data. Hashes are often used to hold data that are related, such as the information about a user. You define a hash like this:
{"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
変数を再利用できます。
# 金額を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"
OutputTypeError: String can't be coerced into Integer
同様に、このコードもエラーになります:
print "5" + 5
OutputTypeError: no implicit conversion of Integer into String
合計が10
になるように数値を追加したい場合は、文字列を整数に変換します。文字列を連結して"55"
を取得したい場合は、整数を文字列に変換します。
動的型付けは柔軟性を提供しますが、欠点の1つは、変数が利用可能ないかなる型でも含む可能性があるため、常にどの種類のデータを扱っているかを確実にすることができないことです。Rubyはデータの型を特定する方法を提供しています。
データ型の識別
Rubyでは、ほとんどすべてがオブジェクトです。整数、浮動小数点数、配列、シンボル、ハッシュなど、これらはすべてRubyオブジェクトであり、それぞれがclass
というメソッドを持っています。これにより、それらがどのタイプかを教えてくれます。さらに、真偽値true
およびfalse
、そして値nil
もオブジェクトです。試してみてください:
42.class # 整数
(42.2).class # 浮動小数点数
["Sammy", "Shark"].class # 配列
true.class # TrueClass
nil.class # NilClass
さらに、kind_of?
メソッドを使用して特定のデータ型を検証することもできます:
42.kind_of?(Integer) # true
これは、変数が与えられ、その型を判別したい場合に特に役立ちます:
# コードのどこかで...
sharks = ["Hammerhead", "Tiger", "Great White"]
...
# 別の場所で...
sharks.kind_of?(Hash) # false
sharks.kind_of?(Array) # true
外部のソースからのデータが正しいかどうかを検証するためにも使用できます。
if data.kind_of? String
data = data.to_f
end
Rubyはkind_of?
と同じ機能を持つis_a?
メソッドも提供していますが、一部の開発者にとっては少し読みやすいかもしれません。
if data.is_a? String
data = data.to_f
end
class
、kind_of?
、is_a?
を使用すると、適切な種類のデータを取り扱っていることを確認できます。Rubyについてさらに学ぶと、データの型を明示的にチェックする必要がない他のデータ処理方法も見つけることができます。
結論
Rubyプログラムで多くの異なるデータ型を使用します。これで、Rubyプログラムで利用可能な主要なデータ型についてより良い理解ができました。
Rubyのデータ型の探求を続けるために、これらのチュートリアルをご覧ください:
Source:
https://www.digitalocean.com/community/tutorials/understanding-data-types-in-ruby