[初學者必讀] 為何我推薦QML作為第一個學習的程式語言
什麼是QML?
對很多程式語言的初學者來說,第一個遇到的問題肯定都是「究竟要從哪一個程式語言開始學起呢? 」。我只能說,要依照你的學習目標而定,這個問題沒有一定的標準答案,想學習開發手機應用程式跟想學習開發網頁應用程式的就不相同,就連開發手機影用程式也區分成是針對Android或iOS而有所不同。
我知道很多人會推薦Python作為第一個學習的語言,原因不外乎是語法簡單、應用領域廣,我個人並不否定這個說法。但你可曾想過,是否有其他語言也有類似的特點呢?答案當然是肯定的,我接下來一系列教學所使用的程式語言,QML,就是其中之一。
QML是 Qt Markup Language的縮寫,Qt(發音同Cute)是一個基於C++的開發框架,而QML是Qt所設計來撰寫GUI(圖形使用者介面)的一個程式語言,它是屬於QtQuick模組的其中一環,QtQuick模組也提供了相當多基於QML的GUI元件,方便於應用程式的GUI開發。(註:何謂框架、模組?我之後會再寫一篇文章來解釋。)
QML有哪裡好?跟Python比又好在哪裡?
其實程式語言沒有所謂的好壞,根本上是無從比較的,端看你要用這個語言來做甚麼,就像我問你,英語跟日語哪個比較好?當然是看你要使用這個語言的環境與對象。只是針對初學者來說,選擇一個容易上手的程式語言,奠定相關基礎之後,再學習其他語言或許會比較簡單。我也很清楚,相對於Python這個程式語言,QML是冷門且比較少人使用的,所以接下來我針對幾個特點來說明。
- 開放原始碼Open Source
QML跟Python都是開放原始碼,雖然說Qt是一家商業軟體公司,但已Qt整個框架來說,大體上還是開放原始碼的,所以在函式庫的部分,還是得基於其授權方式(License)加以使用,這樣的限制在任何Open Source框架或函式庫都是一樣的。
- 跨平台
Qt整個框架中,包括Qt C++和Qt QML的模組,都支援在大多數的平台上執行,不論是Windows、macOS、Linux,甚至是Android跟iOS,都可以運行基於Qt開發的應用程式。這一點,Python也能做到,但兩者在跨平台運行的背後原理不盡相同,不在此討論。
- 語法簡單易懂
QML跟Python的語法都屬於簡單易學,但因為QML本身是設計來作為GUI的開發,所以邏輯上更為直覺易懂,它本身是一種描述式語言,只要你懂得如何描述物件本身,以及物件之間彼此的關係,就能寫出對應的程式碼,這也是為什麼我推薦QML作為第一個學習的程式語言,關於這一點,後面會再稍作說明。
- 具物件導向概念
QML跟Python都算是比較新的程式語言,以設計理念而言,自然都具備的物件導向的概念,而QML其實骨子裡也是用C++開發而成的,那肯定是具有物件導向的特性。至於甚麼是物件導向,對於初學者來說,我不希望一下有太艱深且抽象的概念,讓學習者聽起來模模糊糊,導致打退堂鼓。相反地,我認為直接透過大量的實作練習後,再回頭去深入了解程式碼的架構,才發現「原來這就是物件導向啊!」,這應該才是比較有效的學習方式。
- 應用領域廣
不諱言,Python的應用領域非常廣,不論是大數據、人工智慧、遊戲開發等等領域,都可以看到Python的身影,這也是為什麼Python這麼多人使用的原因。而QML身為一種GUI的開發語言,自然在應用程式不需要畫面或所謂GUI的情況下,就不一定會使用到。但如果把範圍放大至以Qt這個框架來看,其應用面跟Python比起來,自然也是不惶多讓。市面上有使用Qt做為開發框架的應用程式,可能比你想像的還要多。像是LINE的桌機版本,還有Tesla電動車的數位儀表板,都是以Qt開發而成的。
根據以上特點,我相信QML跟Python對初學者來說,都會是適合入門的程式語言,而且在網路上的學習資源也都很多。此外,Qt官方提供的開發文件非常詳細,其自帶的開發工具中所附的範例程式碼也足夠參考。
那跟Python比起來,QML有哪些優勢呢?我列出以下特點供您參考,為何我認為它比Python更適合初學者。
- 描述式語言
前面提到,QML本身是一種描述式語言,雖然QML全名是Qt Markup Language,以Markup這個單字,通常中文翻作”標記式”,因為它的概念類似HTML這樣的語言,透過標記的方式去描述物件,但我個人比較傾向於”描述式”這個說法,這也比較符合QML一開始在Qt模組名稱是使用Declarative這個單字的解釋。那何謂描述式?下一個段落會直接給你看一小段範例程式碼,並說明程式碼對應的畫面呈現,看完應該就能懂了。
- 同時學習到 JavaScript
看到這裡,你可能會問我說,「已經要學QML就頭痛了,還要同時學另一種程式語言喔?」先簡單說明,因為QML主要是描繪GUI裡的物件,而這些物件本身可能是可以被操作的,或是當某些事件發生時有特定的變化,這些看不到的背後邏輯,並無法透過QML撰寫。舉例來說,假設畫面上有一個透過QML繪製出來的按鈕,當我在一個按鈕上點擊時,會發生甚麼樣的事情,是由開發者所定義的,這些定義就是所謂的邏輯。而邏輯開發的部分,在QML裡,是可以使用JavaScript這個程式語言來撰寫的。所以在整個學習過程中,入門的JavaScript也是必要的,不過別擔心,JavaScript的語法也算是簡單易學的,我並不會特別針對JavaScript這個語言再特地說明和教學,而是自然而然在範例中學習並理解。
- 開發快速
Qt官方提供了許多模組,在開發上可以省去很多時間,也因為QML加上JavaScript的使用,不需要花太多時間在先了解一些專有名詞,並搞懂其理論。而是在做中學,不論是透過官方提供的範例程式自學,或者是參考我接下來一系列教學文章,相信都能在短時間就可以看到一定的成果。
難道都只能從Hello World開始學起嗎?
很多人在初次學習程式語言時,不論是哪一種語言,不論是從書籍或網路等資源,通常第一個就是學習印出Hello World,而且是在所謂的終端機介面中輸出這些字。這是為什麼呢?
現在這個時代,我們所理解的電腦都是有豐富畫面的,也就是所謂的GUI圖形化操作介面,而GUI在微軟的Windows作業系統出現之前,其實就存在了,但並不普遍。在那個時代,甚至GUI還沒問世之前,電腦的顯示畫面只有如同在終端機看到的樣子,類似於Windows裡的命令提示字元。所有當時學習程式語言,要看到執行的結果,最直接的方式就是在畫面上輸出文字,以至於第一個學習的程式總是印出Hello World。
如今,所謂的桌面視窗應用程式,也就是運行在像Windows或macOS這些視窗作業系統下的應用程式,才是一般使用者會直接看到樣貌,所以對初學者來說,學習開發具有GUI的視窗應用程式,才是最有感的。
我知道,會有人問說,那開發GUI一定要會寫程式嗎?答案是否定的。此外,我想可能也會有些人對我前面提到的看法持反對意見,認為GUI可以透過開發套件工具,直接用拖曳的方式,快速製作出想要呈現的畫面就可以了啊!這樣的說法其實我也同意,就連Qt開發套件也提供這樣所謂WYSIWYG(所見即所得)的設計工具。
那為何還需要學呢?原因很簡單,就是我一再強調的,QML是用來開發GUI的程式語言,它不像C++或Python,主要是用來開發上述所謂邏輯的部分,學習的面向不同。而且這樣的描述式語言非常直覺,可以快速修改程式碼後並看到畫面的呈現結果。對初學者而言,就學習的效果和可以獲得的成就感上,我相信都更勝於其他程式語言的。
來個範例程式瞧瞧吧
說明了這麼多,不如直接來個簡單的範例程式,讓你大概了解我所謂的描述式是多麼直覺易懂。
這張圖的左邊是程式碼,右邊是執行的呈現畫面。請你先遮住左邊不看,描述一下右邊的畫面裡有甚麼,我估計你的描述應該跟以下相去不遠。
有一個紅色方塊,它的右邊有一個綠色方塊,下面有個藍色方塊。
好的,接下來看一下左邊的程式碼,我以下的描述,相信你可以很容易從程式碼中對應出來。
首先,畫一個方塊,命名為redRect,寬高皆為50,顏色是紅色(red)
然後,再畫一個方塊,命名為greenRect,寬高分別為30和40,顏色是綠色(green),方塊的左邊對齊方塊redRect的右邊
接著,再畫一個方塊,命名為blueRect,寬高分別為60和20,顏色是藍色(blue),方塊的上方對齊方塊redRect的下方
看懂了嗎?就是這麼簡單,沒錯,非常直覺易懂。這就是我所謂的描述式語言,短短幾行程式碼就可以產生出對應的畫面,而且容易理解,幾乎不需要太多解釋,就可以推論出這個語言的語法和撰寫方式。當然,這還只是第一步,接下來我會有一系列的教學文章,帶著各位有興趣的讀者,進入這個程式語言的世界。
個人超級喜歡QML 心目中排行第一的UI framework
我覺得網頁框架很多都沒QML好用…
但還是第一次看到有人叫別人初學就選QML
有一些小問題初學者採到恐怕解不出來
比如property binding跟單純assignment初學者怕是分不出來
謝謝您的回應,您說的沒有錯。
所以對初學者來說,不會一開始就學習到property binding
BTW, QML也是我最喜歡的UI Framework
不過他就是Qt的一部分,主要平台還是Desktop
我不會拿它跟web UI framework比較