最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Vala 介紹

2022-12-26 13:00 作者:Superbart  | 我要投稿

本人博客鏈接:https://www.superbart.xyz/p/vala-introduction.html

Vala 是由 GNOME 小矮人開發(fā)的面向?qū)ο缶幊陶Z言。編程語法接近 Java,圍繞 GLib 庫展開。編譯方式是先翻譯成 C 語言代碼,然后編譯。用途嘛……我來講個(gè)故事吧。

我半年前學(xué)了 Dart,Google 開發(fā)的語言,編程語法接近 Javascript。官網(wǎng)說它是“多用途語言”,然而我感覺多數(shù)人學(xué)了它,就是為了用 Flutter :-P

Vala 也是這樣,名義上是一個(gè)“多用途語言”,但是我感覺多數(shù)人學(xué)了它,只是為了 GTK。我也是不知道為啥,非得用這個(gè)語言寫我的數(shù)據(jù)庫大作業(yè),花了兩周時(shí)間邊學(xué)邊寫,最后也不知道我學(xué)了個(gè)啥……

不得不說,GLib 是一個(gè)很強(qiáng)大的庫。本來說是給 GTK 服務(wù)的,后來獨(dú)立出去了。它實(shí)現(xiàn)了單/雙向鏈表,變長數(shù)組,樹,Map 等數(shù)據(jù)結(jié)構(gòu)。它還以 GObject 為中心,構(gòu)建了一個(gè)相當(dāng)完善的,龐大的,讓我這個(gè)菜雞不知所以的類系統(tǒng)。

接下來大致介紹順序:

  1. 基本輸入輸出(從鍵盤輸入,從終端輸出)

  2. 判斷語句 if-else 和 switch

  3. 循環(huán)語句,包括計(jì)數(shù)和計(jì)事件循環(huán)

  4. 我一點(diǎn)都不懂的面向?qū)ο?/p>

  5. GLib 庫和 Gee 庫

  6. SQLite 3 庫

推薦鏈接

先給大家推薦一些前人的經(jīng)驗(yàn)教訓(xùn):

  • 探索Vala語言 - 星外之神的博客 | wszqkzqk Blog

    https://wszqkzqk.github.io/2022/10/17/%E6%8E%A2%E7%B4%A2Vala%E8%AF%AD%E8%A8%80/

  • Valadoc.org (Vala 庫文檔網(wǎng)站)

    https://valadoc.org/index.htm

  • Projects/Vala/Documentation - GNOME Wiki! (官方文檔)

    https://wiki.gnome.org/Projects/Vala/Documentation

基本輸入輸出

輸出一句話,都是那德行:

輸入一個(gè)數(shù)字:

輸入字符串:

判斷語句

if-else 判斷:

swtich 判斷:

省略,很少用到。

循環(huán)語句

計(jì)次數(shù)循環(huán) for

計(jì)事件循環(huán) while

面向?qū)ο筇匦?/p>

先說一句,我面向?qū)ο笳n學(xué)的一塌糊涂,如果想了解更多,請看官方介紹:Project/Vala/Tutorial#OOP

https://wiki.gnome.org/Projects/Vala/Tutorial#Object_Oriented_Programming

注意,Vala 基于 GLib,GLib 包含 GObject,GObject 僅支持單向繼承。所以,跟 Java 一樣,Vala 是單繼承+接口。

從大家喜聞樂見的開始:

這個(gè)是我從網(wǎng)上抄的一段代碼:


Gee

Gee 相當(dāng)于 C++ 里面的 STL 。我對這個(gè)了解不多,先把官方的示例貼上來:Projects/Vala/GeeSamples - GNOME Wiki!

https://wiki.gnome.org/Projects/Vala/GeeSamples

實(shí)際上 GLib 已經(jīng)實(shí)現(xiàn)了很多的數(shù)據(jù)結(jié)構(gòu),但我個(gè)人建議 Gee,功能比 Glib 本身有的更豐富,但是編程的時(shí)候需要添加 Gee 庫。?

using Gee;

Glib 中,我有用過:

  • Array<類型>:變長數(shù)組

  • List<類型>:雙向列表

Gee中,我有用過:

  • Set<類型>:無重復(fù)集合

  • HashMap<類型1,類型2>:哈希字典

具體用法請參閱相關(guān)文檔和示例,鏈接給完了,我溜了~

迭代,匿名函數(shù)

首先是匿名函數(shù),很簡單:

(函數(shù)形參)=>{函數(shù)體語句}

(函數(shù)形參)=>一條語句

一般用于函數(shù)作形參的時(shí)候,臨時(shí)寫一個(gè)簡單的。比如下面那個(gè)情況。

還有迭代,有些預(yù)先定義好的數(shù)據(jù)結(jié)構(gòu)都支持迭代,使用的時(shí)候使用 foreach 方法就好。比如說:

異常處理和空值

先寫出一個(gè)錯(cuò)誤空間,說明這是啥大類的錯(cuò)誤,里面可以細(xì)分。

寫函數(shù)/方法的時(shí)候,可以加入 throws 關(guān)鍵字,注明會(huì)拋出啥錯(cuò)誤。里面需要拋出錯(cuò)誤的時(shí)候,使用 throw 語句拋出。下面是一個(gè)例子:

要捕捉拋出的錯(cuò)誤,請使用 try-catch-finally 語句:

Vala 的變量可以設(shè)為空值,方法是加一個(gè)問號:

我個(gè)人認(rèn)為,如果你不能確保方法確實(shí)能返回一個(gè)元素,可以使用這個(gè)。

當(dāng)然,可以不用這么麻煩,這只是一個(gè)例子。

SQLite 3 庫

SQLite 是一個(gè)庫,實(shí)現(xiàn)了很完備的關(guān)系數(shù)據(jù)庫。它將數(shù)據(jù)庫存在一個(gè)文件里,使用的時(shí)候,調(diào)用 SQLite 庫相應(yīng)的函數(shù),來對這個(gè)文件數(shù)據(jù)庫進(jìn)行基本操作。

這東西是一個(gè) C 語言庫。但 Vala 可以使用 C 庫,它使用 vapi 文件來對應(yīng) C 的頭文件。(實(shí)際上 Vala 也可以寫 C 語言庫,畢竟這玩意最后還是會(huì)變成 C 語言來編譯。)

所以說,Vala 的 SQLite 庫用起來應(yīng)該和 C 語言的差不多。不過請注意,Vala 是面向?qū)ο蟮?,?SQLite 的庫在引用到 Vala 的時(shí)候,做了面向?qū)ο蟮奶幚怼?/p>

使用前,引用這個(gè)庫:

using Sqlite;

數(shù)據(jù)庫類

如此定義一個(gè)數(shù)據(jù)庫對象:

Sqlite.Database m_db;

打開數(shù)據(jù)庫:

Sqlite.Database.open_v2 (string path, out Sqlite.Database);

執(zhí)行語句:

m_db.exec (string sql_exec);

數(shù)據(jù)庫聲明類

定義方式如下:

Sqlite.Statement add_flight;

準(zhǔn)備聲明:

綁定聲明:

綁定依然有一系列的函數(shù),此處只看綁定字符串

執(zhí)行聲明并清除綁定:

循環(huán)取出返回值:

如何速通一個(gè)編程語言

我當(dāng)時(shí)是這么學(xué)的 C 語言:

  1. 基本輸入輸出

  2. 判斷語句

  3. 循環(huán)語句

  4. 函數(shù)

  5. 數(shù)組

  6. 結(jié)構(gòu)體

  7. 指針

前三條是說明這個(gè)語言大致的語法如何,因?yàn)榫幊趟季S的邏輯無非就那些:從哪里開始,需要那些材料,需要經(jīng)過那些步驟,那些步驟得不斷進(jìn)行,這個(gè)步驟執(zhí)行的條件是什么,這個(gè)步驟的結(jié)束條件是什么,最后的成果是如何的?邏輯搞明白了,接下來就是靠語言實(shí)現(xiàn)了。

接下來第四條,我認(rèn)為是說明這個(gè)語言的性質(zhì)。C 語言是面向過程的語言,所以主要是函數(shù)。而要是面向?qū)ο蟮脑?,教完函?shù)之后,就是教你如何寫一個(gè)類,如何搞繼承之類的了。

剩下那三個(gè),說明這個(gè)語言的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu),有鏈表,棧,隊(duì)列,字符串,樹,圖之類,還有集合,鍵值對字典這些常用的。這些東西給你了實(shí)現(xiàn)的工具,不過大多數(shù)語言已經(jīng)實(shí)現(xiàn)了,比如 Java 。

最后,速通了語言,不代表所有。你得找到相對應(yīng)的庫。要是庫很缺乏,或者根本沒學(xué)的話,很有可能你啥都干不了。我暑假兩天速通了 ?Javascript,然后我由于沒學(xué)任何 Javascript 的庫,比如 vue / react 啥的,我都不知道要用這個(gè)來干嘛:-P

最后,如有不完備或錯(cuò)誤之處,敬請諒解。我還是水平不夠啊:-(

Superbart 2022-12-20

Vala 介紹的評論 (共 條)

分享到微博請遵守國家法律
大名县| 昌邑市| 凤庆县| 和林格尔县| 安多县| 枣庄市| 扶风县| 葫芦岛市| 左贡县| 肇源县| 苏尼特右旗| 张掖市| 林周县| 区。| 宜州市| 永城市| 青田县| 荆门市| 临海市| 温州市| 盐城市| 明溪县| 临朐县| 龙陵县| 淮安市| 南陵县| 通山县| 高阳县| 惠东县| 巴彦淖尔市| 新巴尔虎左旗| 陆河县| 睢宁县| 四子王旗| 武功县| 乌鲁木齐县| 赤城县| 海丰县| 蓬溪县| 新疆| 山阴县|