Thrift不是嚴格意義上的編程語言,可是卻賽過不少編程語言,充滿了美感。編程
Thrift 這門編程語言提供了以下幾種基礎的數據類型:數組
- bool: A boolean value (true or false)
- byte: An 8-bit signed integer
- i16: A 16-bit signed integer
- i32: A 32-bit signed integer
- i64: A 64-bit signed integer
- double: A 64-bit floating point number
- string: A text string encoded using UTF-8 encoding
通常來講,咱們也就經常使用那幾種,就像在其餘平常編程語言中同樣。好比我,基本就是這『三板斧』:bash
再讓咱們來看看,Thrift提供了哪些容器類型:數據結構
- list: An ordered list of elements. Translates to an STL vector, Java ArrayList, native arrays in scripting languages, etc.
- set: An unordered set of unique elements. Translates to an STL set, Java HashSet, set in Python, etc. Note: PHP does not support sets, so it is treated similar to a List
- map: A map of strictly unique keys to values. Translates to an STL map, Java HashMap, PHP associative array, Python/Ruby dictionary, etc. While defaults are provided, the type mappings are not explicitly fixed. Custom code generator directives have been added to allow substitution of custom types in various destination languages
簡直了C++ STL 一毛同樣,命名都差很少。惟獨 list 這種數據結構,實際上是『動態數組』,單從名字上看,很容易讓人聯繫到鏈表,這在其餘的編程語言中,也有這個現象,好比Python 中的也叫作 list 。app
稍微正常一點的語言,對 OOP 的支持,天然是必不可少的,我以爲,最好直接提供 class 這個關鍵字,儘可能有清晰的語義。編程語言
可是 Thrift 只有一個 struct,基本上和 C 的struct,同樣,也是功能少得可憐,不過考慮到它僅僅是一箇中間語言,天然是情有可原的。ide
咱們來看一下,一個寫得好的 struct,應該如何定義,作到既清晰又完備的:函數
struct Person {
1: required string name; // 必須字段,很明確
2: required i64 age;
3: optional string addr; // 可選字段
4: optional string defaultValue = "DEFAULT"; // 默認字段
5: string otherValue; // 不是很明確!
}
複製代碼
在『面向接口編程』的原則下,『接口』是一個很重要的因素。有的人稱之爲函數,有的人稱爲方法,本文咱們統稱爲『方法』。性能
在Thrift中,定義接口是一件很簡單的事情( 摘自官網的一個示例 ):ui
// 接口, 還能夠繼承, 也許咱們有時候能夠搞個 『BaseService』 之類的,不過我不多用到。
service Calculator extends shared.SharedService {
// 正常方法,和C++這類傳統語言,基本如出一轍。
void ping(),
i32 add(1:i32 num1, 2:i32 num2),
i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),
// 特殊方法,基本不多用到了,在我有限的經歷中,只使用過一次,讀者不必關注它
oneway void zip()
}
複製代碼
關於異常,在Thrift中就像定義 struct 同樣,由於exception從概念上講,也是一種class,所謂『萬事萬物皆對象』嘛。不過如今咱們用『exception』這個關鍵字,也正好符合我前文所講的,清晰的語義。讓咱們看看Thrift中的異常是如何定義的:
exception InvalidOperation {
1: i32 whatOp,
2: string why
}
複製代碼
枚舉這個東西,真的是過重要了,和前面的exception相似,它也不過是一種class而已。不過Thrift中只支持枚舉 int 值,比較遺憾,其實不少時候,對枚舉的要求,咱們是很豐富的,好比支持 枚舉 string。Thrift中枚舉以下:
enum Operation { // 功能着實比較孱弱
ADD = 1,
SUBTRACT = 2,
MULTIPLY = 3,
DIVIDE = 4
}
複製代碼
若是喜歡個人文章,請關注個人公衆號:『浮生若夢的編程』。 也能夠關注個人簡書專欄:『浮生若夢的編程』。 或者加入個人知識星球,『浮生若夢的編程』,獲取更多幹貨。