2019年9月27日 星期五

在Blogger嵌入程式碼,使用Google Code Prettify

前言

因為上班之後,要學的東西太多了,主管建議我可以筆記下來,後來我想說乾脆就寫部落格吧!如果要寫技術類的,或多或少也要貼一些範例程式碼。只是沒想到Blogger居然沒有支援,所以只好來找個方式來解決。

其實很簡單

基本設定

我是個懶惰的人,設定太多的不用,後來就選到Google Code Prettify。其實只要參考google/code-prettify裡面做設定就可以完成了:

這段JavaScript需要放進Blooger,放哪裡?隨便。不是啦,放在:

版面配置裡面有辦法新增小工具的地方,有很多?沒關係,隨便找一個地方放,下次再寫一篇討論這個問題。
選擇HTML/JavaScript,之後,把下面那段script丟進去:

<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
我的好像長的不一樣,這等一下講。

之後呢,就可以在寫文章時,透過切換成HTML模式,把你想要的程式碼嵌進去了。你可以選擇先在撰寫頁貼上,在切過去修改,或者直接在那邊處理。不過我是建議前者,因為這樣很直覺,也可以省去一些不必要的工(因為如果是用後者,則需要再將程式碼轉換過,避免一些"<" 、">"等被解讀錯誤。而前者則是blogger已顯示為前提轉換成HTML裡的編碼,所以就不用再找工具來轉換。)。再來就是確定程式碼是否有擺對地方了:
要用,<pre></pre>或是<code></code>包起來。
好了,這樣就有基本功能了。接下來:

其他設定

設定語言

顯示行數

設定外觀

你可以透過設定skin來達到更換風格,至於可以填的值要查Gallery of themes for code prettify,但是因為有點不合我胃口,所以我選擇Plan B。COLOR THEMESFORGOOGLE CODE PRETTIFY裡面選擇更多了,而且只要在之前在script的地方前頭貼上CSS,並且用<style></style>包起來就好了,這也就是為什麼上面我的script會比較雜的原因。

後記

即便是一篇不算很難的文章,還是花了很久,寫得不一定很好,也許還是可以考慮一下下方的連結。不過我覺得,至少我不是用抄襲的,希望會慢慢進步。

References

2019年9月20日 星期五

Syntactic sugar

前言

九月終於開始自己第一份正式的全職工作,原本預期會先寫JavaScript,所以職前有再學了一下,結果沒想到一開始是寫自己原本不想碰的C#。倒也不是不喜歡,只是自己原本想學的語言,他的次序比較後面,但是不管,反正學什麼都好,只要能夠變強我都可以。由於語法與過去學習C/C++頗為相似,所以大致上沒有障礙,只是出現一些奇形怪狀的語法,也問了一些奇怪的問題。Google一下,也許應該稱為"Syntactic sugar",或中譯成「語法糖」,太噁心了,還是用英文來稱呼好了。

Syntactic sugar

Sugar,糖,吃糖,有甜頭。也程式有時候是痛苦的,因為有些東西是既定的,寫起來很「ak-tsak」,這時候如果可以簡單一點寫,又不影響功能不就太好了。所以就讓compiler/interpreter 來幫忙處理,在寫程式時就可以爽一點。不過,吃糖一時爽,一直吃糖一直爽?

起源

維基百科有寫到,"Syntactic sugar"是Peter J. Landin 這位先生看人家寫 ALGOL-like programming language時,有很像lambda calculus的寫法,所以就這樣說了。

一些範例

C

// 這在我年輕時可是讓我想破頭
a = a + b;
a += b;

// 雖然指標用的也算習慣,不這樣也算Syntactic sugar?
a[i] == *(a + i);
a->x == (*a).x;

// 這還蠻好用的
int a = b > c ? d : e;

C#

// 由complier自動判斷型別
var x = expr
// 自動呼叫Dispose()釋放資源
using (var sr = new StreamReader(filename))
{

}

對我來說

在沒學之前,會覺得這是什麼糖?可能本來會的知識,被包裹起來不認得了。我記得那時我要用C#寫一支處理CSV的程式,我看CsvHelper官方寫著:
// 由complier自動判斷型別
using (var sr = new StreamReader(filename))
using (var csv = new CsvReader(sr))
{

}
我還跟主管說:「我不知道這個using是要放在哪」,因為C#是用using來接package。知道答案後,真的應該怪當初他出C#的考題,我直接跳過不寫。所以還是要多看多學,才比較有可能知道別人在寫些什麼。最近還有?與??,看別人的程式真的是處處有驚喜。

Derivative terms

Syntactic salt

這就是相反來說,那些對於程式閱讀或撰寫有害的方式。

Syntactic saccharin

這則是指那些華而不實的"Syntactic sugar",簡單來說,炫技、耍花槍。

References

Lambda calculus:
https://en.wikipedia.org/wiki/Lambda_calculus
C#语法糖(Csharp Syntactic sugar)大汇总: