> For the complete documentation index, see [llms.txt](https://nkust.gitbook.io/csx/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nkust.gitbook.io/csx/shen-shi-cheng-shi-yan.md).

# 什麼是程式語言

有了程式語言作為工具，指揮電腦做事情就不再需要把手一直放在滑鼠和鍵盤上了！

程式，英文是 Program，是程式設計師和電腦溝通所使用的具有較為嚴謹定義語法的描述命令的集合。透過這樣的命令陳述，可以指揮電腦逐步地依照命令去做一些程式設計師想要它做的運算、決策、以及重複性的工作，以輸出想要的資訊。只要指揮得宜，可以做的事情就非常多樣化了。

不同種類的程式各有不同的語法定義方式，這些定義之集合，構成了一個程式語言（Programming Language）的特性。每一種程式語言各有其特色以及擅長的領域，世界上曾經出現過的程式語言不下數千種，目前還在使用中的程式語言據信應該也有上百種。

程式語言有各式各樣的分類方法，我們就不在此詳述，僅就生活中常見的程式語言示範一些例子。以我們在課堂上一開始接觸的Scratch來說，它是一個視覺化的語言，所有的積木就是可以命令電腦做事情的基本指令，透過這些積木的組合，可以讓舞台上的角色做一些計算或是展現一些動畫效果。例如想要讓舞台上的貓咪說出Hello world!，只要在程式區佈置如下所示的積木就可以了：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_fjbG8n-H7D8mpbXw7%2F2019-03-11_15-53-40.png?alt=media\&token=1a3f8d25-a766-4472-a2fe-7f8f3a0a60fa)

然後在舞台上就可以看到以下這樣的結果：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-LN3bppyrQPEC5_LLG5i%2F-LN3eOLDDW7Q5uZsVoId%2F2018-09-23_12-20-50.png?alt=media\&token=41542dff-55a8-4a9c-823c-e4ce4c280ffe)

Scratch 3預設沒有繪圖積木，需要使用擴充功能：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_fjz6HJJr5279_finc%2F2019-03-11_15-54-25.png?alt=media\&token=888c7038-a057-4615-a0ef-97bdc3d6b0ef)

出現以下的畫面之後，選用「畫筆」功能就可以了：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_fkBg7xKlT3tmQT-hw%2F2019-03-11_15-55-44.png?alt=media\&token=580b87b4-87da-4d2f-9833-f6c1faa5f5a7)

之後就可以在積木類別中看到所有畫筆相關的積木了：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_fkc1we1ggp5s7Fqod%2F2019-03-11_15-57-50.png?alt=media\&token=121567d7-ca93-4d11-bde1-e120f8e917cf)

來看一個更複雜一些的例子，使用Scratch來畫SIN函數圖形：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_flYq7agTE1cr_mExB%2F2019-03-11_16-02-14.png?alt=media\&token=08076897-5314-4357-922a-4052812d74e7)

以下是執行結果的影片：

{% embed url="<https://youtu.be/OK1_8JpFzoE>" %}

除了使用積木的型式設計的程式語言之外，透過文字描述來下命令的才是大宗。這其中，目前最受歡迎的程式語言包括了C/C++, BASIC/Visual Basic, Python, Ruby, Pascal, Perl, Java, Javascript, PHP等等。在此我們以Python為例，使用Python語法要輸出Hello world!這個字樣，需要使用以下的指令：

```python
print "Hello world!"
```

就這樣一行，也是非常簡單。然而，如果要讓Python來畫SIN函數圖形的話，則需要以下的程式指令：

```python
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 360)
y = np.sin(x)
plt.plot(x, y)
plt.show()
```

輸出的結果如下所示：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-LN4L22lxKooUC-atgQv%2F-LN4LEIejFwi98uXI4Jp%2Fsinwave.png?alt=media\&token=267de70f-0419-4508-b505-40930efd5637)

&#x20;由上面的例子可以看出，程式語言Programming Language就是一套嚴謹定義的語法和規範，根據該規範，我們就可以寫出（或是繪出，如果是積木式語言的話）一組指令的腳本，電腦會透過翻譯程式（有分為直譯程式和編譯程式兩種）幫我們把這份腳本翻譯成電腦能夠懂的運算程式，然後再去執行它們，並顯示出結果。上面兩個例子就是把我們知道的函數輸出，畫成圖形的例子。

再舉一例，我們在中學的時候曾經學習過圓的極座標式，可以用半徑和角度來計算出(x, y)座標，這個式子如下：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-LNIZ07uTv2dx-T0Obmt%2F-LNI_DSSWWT3itAWINxz%2F2018-09-23_21-25-08.png?alt=media\&token=8d0fb391-60f6-4f22-9f7b-cad8ca37f49e)

利用這個式子，我們可以使用如前面例子所示的程式積木在Scratch的舞台中畫出圓形，如下所示：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_flxWmjk484rlK1jaq%2F2019-03-11_16-04-00.png?alt=media\&token=ad079e5c-ef54-4357-8b1f-8bbcf6c9c6b7)

執行的過程如下：

{% embed url="<https://youtu.be/T-moJpKudr0>" %}

更進一步地，還可以限制計算出的點，來完成正多邊形的繪製，程式積木如下所示：

![](https://3758851535-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8PFR2UvTkWwSK8m0%2F-L_fjZsw1u3LHaQ37Egd%2F-L_fmrKTDuwXzP1b_-iX%2F2019-03-11_16-07-54.png?alt=media\&token=7eb7c1f1-5ada-4939-88cf-5ae6195b01f8)

執行的結果如下：

{% embed url="<https://youtu.be/Pge_AzXn0ug>" %}
