Just My Life & My Work

語法糖 (Syntactic Sugar) 有點像是「炫技」的概念,把淺顯易懂的東西包裝成複雜華麗的樣貌,藉此吸引人的眼光。或是說,隱藏物件複雜的內容,僅顯露簡單的表面,然後大家都能輕易使用。😎

寫程式的過程中,時常會需要寫判斷 IF ELSE,如果每次都要打這六個字,有時候真的會很煩~

那麼該怎麼簡化此寫法,於是我便常用:

expression ? option1 : option2

現在只要兩個符號?和:,即可搞定兩種判斷。不過簡化也需要看狀況,以免未來看到還要花時間去推敲理解。

語法糖(Syntactic sugar),也譯為糖衣語法,是由英國​計算機​​科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指計算機語言中加入的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。通常來說,使用語法糖能夠增加程式的可讀性,進而減少程式出錯的機會。

  • 對於機器語言,任何比它高級的語言都是語法糖,比如彙編語言,高級語言。
  • 對於彙編語言,任何比它高級的語言都是語法糖,比如高級語言。
  • 對於高級語言,物件導向的語言都是語法糖。
  • 對於物件導向的語言,人類語言都是語法糖。

比如:

y+=1 是 y=y+1 的語法糖

y+=x 是 y=y+x 的語法糖

一個例子是C語言中的for迴圈:

for (i = 0; i < 10; i++) {
// P
}

.

其效果在不考慮 for 迴圈中的 continue 語句時,和以下的 while 迴圈是一樣的,其中 P 是迴圈要處理的主體。

i = 0;
while (i < 10) {
// P
i++;
}

.

2012 年開始寫 iOS App 是用 Objective C 程式語言,坦白說初學時挺痛苦,後來改用語法糖後,就寫得比較輕鬆愉快~

OC 語法糖

@[] 和 @{}

比如 OC 取得陣列元素:

id element = [array1 objectAtIndex:0];

.

OC 語法糖:你看,我寫起來多方便?

id element = array1[0];

.

又例如字典的初始化:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionary objectForKey:@"key1"];
NSLog(@"key1 => %@", value);

.

我們能這樣簡化:

NSDictionary *dictionary = @{
                             @"key0" : @"value0",
                             @"key1" : @"value1",
                             @"key2" : @"value2"
                             };
NSLog(@"key2 => %@", dictionary[@"key2"]);

因為我現在主要開發 Flutter App,舉一個例子:

Dart 中可透過 async/await 或者 Future 定義異步操作,而事實上 async/await 也只是語法糖,最終還是透過編譯器轉為 Future。

甚至,「定義」和「實作」的關係,我只要拿定義來實現商業邏輯功能,是不需要考慮它裡頭怎麼實作⋯⋯

此時,對實作而言,定義就是語法糖。

實際舉排序為例,我不用管它是

  • 選擇排序法(Selection Sort)
  • 氣泡排序法(Bubble Sort)
  • 插入排序法(Insertion Sort)
  • 謝爾排序法(Shell Sort)
  • 合併排序(Merge Sort)
  • 堆積排序(Heap Sort)
  • 基數排序(Radix Sort)
  • 快速排序法(Quick Sort)

反正只要能達到我的目的,不管用什麼方式做到都行~

總之,不用拘泥語法糖定義,能開心方便寫程式做研發,是最重要的。😀

我喜愛「語法糖式開發」,因為較為接近生活應用,可以很快完成一支 App,這是我認為寫程式最有成就感之處。🤠

參考:

廣告

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: