跳轉至內容

從 Zip/語法程式設計 Gambas

來自 Wikibooks,開放世界中的開放書籍

程式設計

[編輯 | 編輯原始碼]

程式設計是製作應用程式。它也稱為“編碼”,因為指令是用“程式碼”編寫的。

程式語言有很多種。我們使用的是GAMBAS。(Gambas Almost Means BASic)。BASICBeginner's All-purpose Symbolic Instruction Code)於 1964 年 5 月 1 日首次出現(截至我寫作的 2019 年,是 55 年前)。每個人都喜歡BASIC。它使我們普通人也能進行程式設計。Benoît Minisini 設計並編寫了GAMBAS,並免費提供。他住在法國巴黎,2019 年 47 歲。他說:“程式設計是我自 12 歲起就熱愛的事物之一”,以及“我正在使用許多其他語言,但我從未忘記我用 BASIC 學到了很多東西,也做了很多事情。”

Benoît Minisini——一位真正了不起的人——我們敬佩不已。

這是一段程式碼

Public Sub Form_Open()
  gridview1.Rows.count = 5
  gridview1.Columns.count = 1
  For i As Integer = 0 To 4
    gridview1[i, 0].text = Choose(i + 1, "Red", "Yellow", "Green", "Blue", "Gold")
  Next
  gridview1.Columns[0].text = "Colour"
End

語言是 Gambas。這是一個子程式(也稱為方法過程子例程。如果它給出了某種答案或結果,則可以稱為函式)。

Form with gridview
帶有網格檢視的窗體

Gridview filled

左側是設計。它是一個窗體。可以將其視為一個視窗。右側是應用程式執行時的狀態。這就是您執行程式時看到的內容。

啟動應用程式稱為執行它。程式執行。程式中的每個語句都會被執行Form_open 子程式(上面)填充了gridview 物件。

第一部分

[編輯 | 編輯原始碼]
Gambas Folders

Gambas Toolbox

  1. 開啟 Gambas。
  2. 雙擊左側列表中的 FMain。窗體將開啟。
  3. 在右下角的物件中查詢 GridView。將其拖放到窗體上。透過拖動控制代碼(邊緣的小方塊)調整其大小。也調整窗體的大小。
  4. 右鍵單擊窗體(而不是網格檢視)> 事件選單項 > 開啟。
  5. 鍵入或貼上開啟事件的程式碼(如上所示)。
  6. 按 F5 執行程式。

第二部分

[編輯 | 編輯原始碼]

Gambas 工具箱 使用包含您剛剛嘗試過的網格檢視的相同程式,將標籤拖到窗體上。

Form with Gridview and Label Form with Gridview and Label, running

右鍵單擊網格檢視 > 事件 > 輸入,然後鍵入此程式碼

Public Sub gridview1_Enter()
  Label1.text = "Hello"
End

右鍵單擊網格檢視 > 事件 > 離開,然後鍵入此程式碼

Public Sub gridview1_Leave()
  Label1.text = ""
End

使用 F5 執行程式。將滑鼠移入和移出網格檢視。

Label1.text = "Hello" 是一種表示“將單詞 Hello 放入 Label1 的文字屬性中”的方式。

將複雜事物分解成部分

[編輯 | 編輯原始碼]

這是關於程式設計最重要的思想。編寫良好程式的唯一方法是“分而治之”。從大思路開始,然後將其分解成多個部分。逐個編寫程式。這稱為自頂向下開發。相反的方法也很有用:自底向上開發。編寫一個簡單的程式,並不斷向其中新增部分,直到它完成您希望它完成的所有事情。

最早的程式是簡單的程式,只做一件事情。然後出現了選單,您可以透過按一個鍵來選擇其中的一件事。例如,“按 1 獲取您的賬戶餘額。按 2 充值。按 0 與接線員通話。”如今,應用程式可以完成許多事情。要進行選擇,您可以在頂部使用選單欄、下拉選單以及每個選單中可以單擊的選單項。您可以單擊按鈕。按鈕可以是獨立的,也可以彼此友好並聚集在工具欄中。您可以在任何位置彈出選單。您可以鍵入快捷鍵以使事情發生。可以有多個視窗。在視窗(窗體)內,可以有多個頁面,頂部可以帶或不帶索引選項卡。

按鈕可以位於螢幕上,也可以是鍵盤上的物理按鍵。標準鍵盤有 101 個按鍵,但如果您在鍵入時按住CTRL-(控制鍵),則所有按鍵都可以賦予第二個功能。這為您提供了 202 個按鍵。不夠嗎?按住SHIFT-(換檔鍵)會使所有按鍵再次不同,為您提供 303 個按鈕。有ALT-(替代)使所有按鈕再次不同:404 個按鈕。組合按住的修飾鍵為您提供了更多按鍵集,就像更多鍵盤一樣:SHIFT+CTRLCTRL+ALTSHIFT-CTRL-ALT。現在我記不清了。幸運的是,沒有應用程式使用它們全部。

良好程式設計的關鍵是將事物井然有序。整潔有序。安排事物。您經常執行的操作應將其按鈕可見;您不常執行的操作可以隱藏在彈出選單中。

將複雜的任務簡化為一系列簡單的步驟。編寫大量的小子程式,而不僅僅是一個大子程式。編寫“主子程式”,呼叫較小的子程式來完成小任務。其中最大的主程式是使用者。您使用程式執行此操作,然後執行該操作,然後執行其他操作。程式表示,“為您服務!”並呼叫您編寫的不同子程式來執行您想要的操作。同時,它等待並監聽您的命令,檢查鍵盤和滑鼠,或者,如果它沒有等待您,它會繼續忙於執行您設定的工作。

物件、子程式和事件

[編輯 | 編輯原始碼]

上面的程式有兩個事物(稱為物件):一個窗體和一個網格檢視

發生的事情稱為事件

有一個事件在窗體開啟時“觸發”。它被稱為(毫不奇怪)OPEN 事件。如果希望在窗體開啟時發生某些事情,請編寫一個名為Form_Open 的子程式。當OPEN 事件觸發時,將執行那裡的指令。應用程式啟動時,窗體將開啟。

您必須考慮兩件事:什麼會發生以及何時會發生。“什麼”是子程式中的指令列表。“何時”是選擇要處理的事件的問題。

名稱和將某物放入某物中

[編輯 | 編輯原始碼]

一切事物都必須有名稱。人有名字。窗體有名稱。按鈕有名稱。您可以使用字母和數字進行選擇,始終以字母開頭,並且不包含任何空格。

主窗體稱為FMain。其開啟事件為Form_Open

我喜歡將其稱為FMain 的約定。“F”表示“窗體”。如果我有一個列出人員地址的窗體,我將將其稱為FAddress。當它開啟時——也許是單擊按鈕——其開啟事件將查詢名為FAddress_Open 的子程式。

右鍵單擊物件,選擇事件,然後單擊要為其編寫一些程式設計內容的事件

Using the Event menu

  • 右鍵單擊窗體 > 事件 > 開啟 > 為開啟事件編寫程式碼。

會有一個又長又複雜的事件列表。不要驚慌:只有少數幾個經常使用。學習這門語言很大一部分是熟悉對某些物件最有用的事件。例如,按鈕喜歡被點選;你不會經常使用其他事件。可能,進入按鈕會在視窗底部的一行中顯示一些幫助文字,離開它會清除訊息,但並不常見。我還沒有見過按鈕的雙擊處理程式:誰會雙擊按鈕?你會習慣物件擁有的常用事件。

  • 在您編寫的程式中,鍵入或貼上此子程式。每次您將滑鼠滾輪滾動到網格檢視中時,都會顯示一條“Hello”訊息。當您嘗試過並且它足夠煩人時,刪除這三行程式碼。
Public Sub Gridview1_Enter()
  Message("You have entered the gridview ... evil laugh...")
End

當您雙擊時,將發生Activate事件。輸入這些行並雙擊任意一行。

Public Sub gridview1_Activate()
  Message("You double-clicked row " & gridview1.row)
End

gridview1.row 是您雙擊的行。在您單擊或雙擊時設定。 “&” 符號(與號)連線兩個文字字串。(字串是文字……一個接一個的字元。)下一段程式碼將在您單擊gridview1時執行某些操作。

Public Sub gridview1_Click()
    Label1.text = "You clicked on row " & gridview1.Row & ", " & gridview1[gridview1.row, 0].text
End

Clicking Gridview Rows

有兩個字串。(1)“You clicked on row ” 和(2)“,”。字串周圍用雙引號括起來。

等於右側的內容進入左側的內容。

您不會將內容放入Label1 中;您將其放入Label1text屬性中。

通常語言不允許這樣做:Label1.text = 345。它必須是 Label1.text = "345" 或 Label1.text=Str(345),但 Gambas 不介意。Gridview1.Row 指的是您單擊的行號。數字通常儲存在儲存數字的地方,字串儲存在儲存字串的地方,但 Gambas 會自動轉換它。

gridview1[gridview1.row, 0].text 看起來很複雜,但讓我們分解一下。從左邊看,它與gridview1有關。從右邊看,它是某物中的text。方括號中的部分是兩個用逗號分隔的數字:您單擊的行和零。在上面的示例中,它是 [2,0]。第二行,第零列。

網格檢視的行和列從零開始編號。

屬性和事物的種類

[編輯 | 編輯原始碼]

在本部分中,示例不是 Gambas,但它們是用 Gambas 風格編寫的。

看,約翰和瓊


部件的引用方式類似於John.armJoan.head

有時部件有更小的部件,例如John.hand.finger

部件有屬性,例如Joan.height

某些屬性是整數(整數),例如Joan.Toes.Count

某些屬性是浮點數(帶小數部分的數字),例如John.height。這與John.Leg.Height不同。

某些屬性是布林值(真/假,是/否),例如戴帽/不戴帽。我們可以說,作為一類,人都具有一個名為 HatOn 的屬性,“John.HatOn” 或“Joan.HatOn”。(它是。)

它們屬於名為“person”的類。約翰是一個人;瓊是一個人。人都具有身高、體重、戴帽/不戴帽和其他屬性。

人還有各種能力。“person”類可以唱歌、揮手和微笑。他們的腿可以行走。例如,John.sing(“Baby Face”)。有時約翰需要知道哪個版本,例如,John.sing(“Baby Face”, “Louis Armstrong”)Joan.wave(“Hello”, “John”, 8)。這意味著“瓊!向約翰熱情地揮手打招呼!”

他們還可以對各種事件做出響應,例如被推,或者聽到有人唱歌。這些事件是John_push()Joan_push()John_HearsSinging()Joan_HearsSinging()

讓我們用 Gambas 的風格編寫對這些事件的響應。

當 Push 事件發生時,約翰可能會感到惱火。

Public Sub John_push()
        John.Turn(180)
        Message.shout(Hey! Quit shoving!)
End

瓊可能會加入她聽到的歌曲,並開始一起唱。

Public Sub Joan_HearsSinging(Ave Maria)
        Joan.HatOn = False
        Joan.sing(Ave Maria)
End

布林屬性是是/否、真/假、戴帽/不戴帽之類的東西。將 false 放入 HatOn 屬性意味著在唱歌之前取下她的帽子。

約翰有轉身的能力,但我們必須說明要轉多少。他轉動 180°,做一個轉身,以便面對推他的人。

瑪麗可以唱歌,但我們必須說明要唱哪首歌。是她正在聽到的那首。我們說HearsSinging事件傳遞了歌曲的名稱,“Ave Maria”。該歌曲標題傳遞給瓊的唱歌能力,該能力稱為Joan.sing。您傳遞的資訊以便可以執行該操作稱為引數。某些方法需要多個引數,它們可以是數字(整數、浮點數……)或字串(如“Jingle Bells”或“Fred”或“別再推了,行嗎?!”)或布林值(戴帽/不戴帽、抱怨/不抱怨、真/假之類的東西),或其他物件,或者,好吧,任何東西。

讓我們定義一個子程式,這次我們在其中新增一些重複。有兩種重複——一種是重複一定次數,另一種是必須檢查某些內容以檢視是否該停止。(而且後者有兩種,一種是在開始之前檢查是否該停止,另一種是在完成之後檢查——預測試迴圈或後測試迴圈。)以下是確定和不確定型別。

五次

Public Sub DoExercises()
        For i as integer = 1 to 5
           Hop()
        Next
End

直到疲倦

Public Sub DoExercises()
        Do Until Tired()
           Hop()
        Loop
End

只要不疲倦

Public Sub DoExercises()
        While Not Tired()
           Hop()
        Wend
End

在第一個中,將會有 5 次跳躍,僅此而已。“i” 是在For i as integer = 1 to 5行建立的整數,它從 1 計數到 5。它由NEXT一詞增大 1。重複的部分稱為迴圈

Tired() 是必須解決的問題。解決它的程式將在其他某個子程式中。最後會有一個答案:你累了嗎?是或否,真或假。這將作為最終值返回Tired() 看起來像一個單一事物,即函式返回的值。函式計算某些內容並提供答案。

如果“hop”尚未知道,則“Hop”可能需要進一步解釋。您可以使用任何您喜歡的虛構詞,只要您用 Gambas 內建且已知的術語來解釋它們即可。以下是一個解釋Hop程式的子程式。

Public Sub Hop()
        GoUp()
        GoDown()
End

將程式分解成更簡單的程式的優點在於程式本身可以解釋。您無需陷入如何完成的細節中,即可為複雜的任務命名。您不僅可以使用對閱讀您程式的其他人有意義的詞語,還可以更輕鬆地跟蹤錯誤。您可以更輕鬆地測試每個部分。您還可以更輕鬆地修改程式。DoExercises() 可以保持原樣,但您可以使用以下內容更改跳躍的定義:

Public Sub Hop()
        GoUp()
        ShoutAndPunchTheAir()
        GoDown()
End

Public Sub Hop()
        GoUp(LeftFoot)
        GoDown()
        GoUp(RightFoot)
        GoDown()
End

單引號後的任何內容都是您自己的註釋。Gambas 會忽略它。添加註釋以提醒您正在做什麼。它還可以向可能需要閱讀您的程式的其他人解釋您的想法。以下是一些虛擬碼:

Public Sub Joan_HearsSinging(Ave Maria)  'you must say what the song is
        Joan.HatOn = False  'remove your hat
        'now the fun starts
        Joan.sing(Ave Maria)  'sing the same song
End

虛擬碼到此結束。下一部分將回到 Gambas。

從 Zip 程式設計 Gambas
語法 ThreeThings → 
華夏公益教科書