多用字面量語法,少用與之等價的方法(1)

2021-07-02 12:06:09 字數 2344 閱讀 9710

原文發表於

編寫objective-c程式時,總會用到某幾個類,它們屬於foundation框架。雖然從技術上來說,不用foundation框架也能寫出objective-c**,但實際上卻經常要用到此框架。這幾個類是nsstring、nsnumber、nsarray、nsdictionary。從類名上即可看出各自所表示的資料結構。

objective-c以語法繁雜而著稱。事實上的確是這樣。不過,從objective-c 1.0起,有一種非常簡單的方式能建立nsstring物件。這就是「字串字面量」(string literal),其語法如下:

nsstring *

somestring

= @"effective objective-c 2.0"; 

如果不用這種語法的話,就要以常見的alloc及init方法來分配並初始化nsstring物件了。在版本較新的編譯器中,也能用這種字面量語法來宣告nsnumber、nsarray、nsdictionary類的例項。使用字面量語法(literal syntax)可以縮減源**長度,使其更為易讀。

字面數值

有時需要把整數、浮點數、布林值封入objective-c物件中。這種情況下可以用nsnumber類,該類可處理多種型別的數值。若是不用字面量,那麼就需要按下述方式建立例項:

nsnumber *

somenumber

= [nsnumber numberwithint:1]; 

上面這行**建立了乙個數字,將其值設為整數1。然而使用字面量能令**更為整潔:

nsnumber *

somenumber

= @1; 

大家可以看到,字面量語法更為精簡。不過它還有很多好處。能夠以nsnumber例項表示的所有資料型別都可使用該語法。例如:

nsnumber *

intnumber

= @1;  

nsnumber *

floatnumber

= @2.5f;  

nsnumber *

doublenumber

= @3.14159;  

nsnumber *

boolnumber

= @yes;  

nsnumber *

charnumber

= @'a'; 

字面量語法也適用於下述表示式:

int x= 

5;  

float y= 

6.32f;  

nsnumber *

expressionnumber

= @(x * y); 

以字面量來表示數值十分有用。這樣做可以令nsnumber物件變得整潔,因為宣告中只包含數值,而沒有多餘的語法成分。

字面量陣列

陣列是常用的資料結構。如果不使用字面量語法,那麼就要這樣來建立陣列:

nsarray *

animals

=  [nsarray arraywithobjects:@"cat", @"dog",  

@"mouse", @"badger", nil]; 

而使用字面量語法來建立則是:

nsarray *

animals

= @[@"cat", @"dog", @"mouse", @"badger"]; 

上面這種做法不僅簡單,而且還利於運算元組。陣列的常見操作就是取某個下標所對應的物件,這用字面量來做更為容易。如果不用字面量,那麼通常會用「objectatindex:」方法:

nsstring *

dog= [animals objectatindex:1]; 

若使用字面量,則是:

nsstring *

dog= 

animals

[1]; 

這也叫做「取下標」操作(subscripting),與使用字面量語法的其他情況一樣,這種方式也更為簡潔、更易理解,而且與其他語言中依下標來訪問陣列元素時所用的語法類似。

不過,用字面量語法建立陣列時要注意,若陣列元素物件中有nil,則會丟擲異常,因為字面量語法實際上只是一種「語法糖」(syntactic sugar),其效果等於是先建立了乙個陣列,然後把方括號內的所有物件都加到這個陣列中。丟擲的異常會是這樣:

'nsinvalidargumentexception', reason: '***  

-[__nsplaceholderarray initwithobjects:count:]: attempt to  

insert nil object from objects[0]' 

ios 多用字面量語法

使用字面量語法可以縮減源 長度,是其更為易讀。注意事項 用字面量語法建立陣列時要注意,若陣列元素物件中有nil,則會丟擲異常。用字面量陣列建立陣列,其效果等於是先建立了乙個陣列,然後把方括號內得所有物件都加到這個陣列中。例如 id obj1 obj1 id obj2 nil id obj3 obj3...

第3條 多用字面量語法,少用與之等價的方法

名詞翻譯 語法糖 syntactic sugar 是指計算機語言中與另外一套語法等效,但是開發者用起來卻更加方便的語法。語法糖可令程式更易讀,減少 出錯機率。字面數值 nsnumber number 1 字面量陣列 nsarray 下標 下標訪問元素 字面量字典 key 可變陣列與字典 mutarr...

多用StringBuilder,少用字串拼接

在c 中,在處理字串拼接的時候,使用stringbuilder的效率會比硬拼接字串高很多。到底有多高,如下 static void main string args sw1.stop console.writeline 拼接字串所耗費時間為 sw1.elapsedmilliseconds 毫秒 st...