介紹
在編寫程序時,您使用數據類型來分類數據。數據類型告訴計算機如何處理程序中的數據。它們還確定您可以對數據進行什麼操作,包括可以執行哪些操作。
思考數據類型的一種方法是考慮我們在現實世界中使用的不同類型的數據。例如,我們使用整數(0、1、2、…)、整數(…、-1、0、1、…)和無理數(π)。
通常,在數學中,我們可以結合不同類型的數字,並獲得某種答案。例如,我們可能想要將5加到π:
5 + π
我們可以保留方程式作為無理數的答案,或者我們可以將π四捨五入為少數位數,然後將數字加在一起:
5 + π = 5 + 3.14 = 8.14
但是,如果我們試圖評估具有另一種數據類型的數字,例如詞語,事情開始變得不太合理。我們如何解決以下方程式?
sky + 8
這不是我們立即知道如何解決的事情。計算機也不能,因為數據屬於兩種不同的類型。“Sky”是一個詞,8
是一個整數。當我們編寫程序時,我們必須注意如何分配值以及如何通過加法、減法、乘法等操作對它們進行操作。
在這個教程中,你將學習到 Ruby 中最重要的數據類型:整數、浮點數、字符串、符號、數組和哈希。這並不是對數據類型的詳盡探討,但它將幫助你熟悉在你的程序中可用的選項。
接下來,你將探索 動態類型。Ruby 程序根據變量包含的內容來確定數據類型,因此理解動態類型的工作原理將幫助你避免在自己的程序中遇到棘手的情況。而且由於變量可以包含任何值,你將學會識別變量的數據類型。
讓我們首先來看看如何在 Ruby 中處理整數。
整數
就像在數學中一樣,計算機編程中的 整數 是可以是正數、負數或 0 的整數(…,-1
,0
,1
,…)。整數也通常稱為 int
。
你可以這樣打印出一個整數:
print -25
Output-25
你也可以將整數存儲在一個變量中,然後通過引用該變量來打印出值:
my_int = -25
print my_int
Output-25
你也可以對整數進行數學運算。例如,你可以計算兩個數字的和並打印出結果:
sum = 116 - 68
print sum
Output48
當我們書寫較大的數字時,我們經常使用逗號使其更容易閱讀。例如,我們會寫 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
。
數學中的許多操作都會給出評估為真或假的答案:
- 大於
- 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
的不同函數和操作如何改變程序的運行路線。
接下來,讓我們探索在我們的程序中處理文本。
字串
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."
小程式“哈囉,世界!”演示了如何在電腦程式設計中使用字串,因為組成該短語哈囉,世界!
的字符是一個字串。
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] # 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中的陣列是可變的,這意味著你可以添加值,刪除值,甚至修改陣列中的項目。
有時我們需要一種在程序中標記事物的方法。這就是符號的作用。
符號
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和其他語言中使用的語法。此語法將鍵定義為Symbols,因此您將使用: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
變量,如果您願意。
# 將金額轉換為浮點數。
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"
,請將整數轉換為字符串。
動態類型提供了靈活性,但一個缺點是您不能始終確定您正在處理的是什麼類型的數據,因為變量可以包含任何可用類型。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 也提供了 is_a?
方法,与 kind_of?
执行相同的操作,但对于一些开发者来说可能更易读:
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