值,資料型別介紹

我被程式碼海扁 @codebeatme
閱讀 7:20·字數 2201·發佈 

你可將程式設計世界籠統的分為兩個部分,資料和對資料的處理,而值正是資料的具體內容,比如,學生的年齡為2323就是一個值。

並非所有的值都擁有具體和直觀的表現,在物件導向程式設計語言中,值可以是物件,如果希望描述他,就不像解釋年齡為23那麽簡單了。當然,物件涵蓋的範圍可能是模糊的,在一些語言中,數值本身就是物件。

值的表示

值一般具有以下兩種表示形式,書寫常值和書寫擁有運算結果的運算式。嚴格的說,常值是運算式的一種,但與其他運算式相比,常值較為簡單並且不包含運算。

什麽是常值?
常值,一般是指程式碼中直接書寫的固定值,或固定值對應的程式碼文字。比如,在上面的學生年齡的例子中,23就是一個常值。

在下面的 JavaScript 程式碼中,所書寫的'你有一條新的短信'1,都是常值。

values_and_data_types.js
// '你有一條新的短信' 是常值
let message = '你有一條新的短信'
// 1 是常值
let number = 1
// message 不是常值,因為他表示的不是固定值
let message2 = message

變數,常數
以上程式碼中的messagenumbermessage2是程式設計語言中的變數,關於變數,你可以檢視變數,常數介紹,變數與常數的區別一節。

常值和直接值之間的區別
常值有時也被稱為直接值,但有種觀點卻認為常值和直接值是不同的,理由是其對應的程式碼文字不同,比如,在 JavaScript 中,物件有兩種不同的寫法,{}new Object(),該觀點將其中一種寫法認定為常值,另一種認定為直接值。

不過,我認為常值和直接值是相同的概念,因為,沒有規定要求常值的表現形式必須是單一的,{}new Object()可以同時成為表示物件的常值。

什麽是運算式?
要說明運算式,我們需要先了解陳述式,陳述式是程式設計語言中的最小功能單位,比如,定義陳述式,指派陳述式等。而運算式是和陳述式類似的概念,只不過運算式通常是具有運算結果的,比如,1+2就是一個運算式,他的運算結果為3

在下面的 JavaScript 程式碼中,所書寫的Date.now()是一個運算式,他的運算結果是表示目前時間戳記的數值。

values_and_data_types.js
// Date.now() 是運算式
let timestamp = Date.now()
// 顯示目前時間戳記
console.log(`目前時間戳記:${timestamp}`)
目前時間戳記:1704198816923

空值

空值是一種特殊的值,用來表示資料內容為空的情況,其對應的關鍵字主要有nullnone,其大小寫視具體語言而定。空值類似於數學中的00可以用來表示沒有,其本身是一個數值。

下面的 JavaScript 程式碼顯示了空值null

values_and_data_types.js
// 顯示 null 值
console.log(null)
null

資料型別

值是資料的具體內容,因此,資料型別也就是值的型別,這對於程式設計語言是有意義的,即便他們中的一些不需要開發人員明確指定,但在實際的執行過程中,每一個值都具有其對應的資料型別。

雖然,不同語言所支援的資料型別所有差別,但以下幾種是普遍存在的。

整數型別
整數型別是數值型別的一種,用於表示整數,根據占用儲存空間的不同,可以細分為多種子型別,比如,長整數型別。
小數型別
小數型別是數值型別的一種,用於表示小數,根據小數點位置的確定方式,可以分為浮點數型別和定點數型別,當然,他們也可以根據占用儲存空間的不同繼續細分。
布林型別
布林型別可以被理解為特殊的數值型別,他只有兩種狀態,真或假,一般對應了關鍵字truefalse,其大小寫視具體語言而定。
字串型別
字串型別用於表示文字資訊,一般通過成對的"'來界定。
日期時間型別
日期時間型別用於表示日期時間,一般對應一個或多個與日期時間相關的類別。

同一種運算對於不同資料型別的運算結果可能不同
相同的運算,對於不同資料型別的值,其運算結果可能是不同的。比如,數值型別1+2的結果是數值3,而字串型別'1'+'2'的結果是字串'12'

資料型別轉換

在程式執行階段,值的資料型別可能會與預期的資料型別不一致,此時就需要進行資料型別的轉換。大部分情況下,轉換可以自動完成,也就是所謂的隱含轉換,如果轉換會導致資料的丟失,那麽將要求進行明確轉換。

什麽是資料型別的隱含轉換?
如果一個值從目前資料型別轉換為目標資料型別後,其表示的內容不會丟失,那麽就可以進行隱含轉換。比如,整數型別10000可以隱含轉換為長整數型別,因為,長整數型別包含整數型別所能表示的數值,不會造成數值的某一部分丟失。

什麽是資料型別的明確轉換?
明確轉換也被稱為強製轉換,如果值的資料型別發生轉換後,其表示的內容丟失或部分丟失,那麽就需要進行明確轉換。

資料型別的明確轉換不確保內容不會丟失
需要指出,明確轉換並不能保證值對應的內容在轉換後不會丟失,他只是確保轉換可以進行。

在下面的 C# 程式碼中,我們將長整數型別100000000000000L轉換為整數型別,由於100000000000000L超出了整數型別的表示範圍,最終得到的結果為276447232

*.cs
unchecked
{
	// 整數型別無法表示數值 100000000000000L
	Console.WriteLine((int)100000000000000L);
}
276447232

資料型別轉換的優先順序
在資料型別的隱含轉換過程中,不同資料型別的優先順序不同,優先順序較低的資料型別,會轉換為優先順序較高的資料型別,然後再參與相關運算。

比如,在 JavaScript 中,字串型別的優先順序比數值型別高,運算式1+'2'中的數值型別1會隱含轉換為字串型別,最終的運算結果為'12'

values_and_data_types.js
// 1 會隱含轉換為 '1'
console.log(1 + '2')
12

程式碼

values_and_data_types.js·codebeatme/programming·GitHub
values_and_data_types.cs·codebeatme/programming·GitHub