一、常量定義最佳方法
採用左移和或運算,具體參考谷歌常量定義方法。
例子:
現在有一個手機視屏app,有以下標記屬性:
1.視屏是否免費
2.是否是視頻播放期
3.視頻是否爲VIP視頻
4.視頻是否爲成人視頻
如果現在從服務器獲取這些屬性時,是採用json傳輸,那麼傳統的做法是寫成一下字符串在進行傳輸:
"free":"true","time":"true","discount":
"false","18+":"false";
顯然這是很費事費時的,客戶端不但需要複雜的邏輯判斷,而且拆分字符也是很麻煩的事,並且從用戶角度來看,也增加了流量的消耗。此時,可以採用左移的方法,將上述屬性分別進行標記:
1.視屏是否免費 0x0001 ——-1
2.是否是視頻播放期 0x0002 —– 2
3.視頻是否爲VIP視頻 0x0004 —— 4
4.視頻是否爲成人視頻 0x0008 —– 8
在定義常量時,兩個數進行或運算時的值可以拆分爲唯一對應的選項,比如不能定義0x0003,因爲0x0001或上0x0002就等於0x0003,這就造成選項不唯一,達不到最初的目的。
而此刻客戶端只需發送如:type=3;
那麼在通過服務器端進行解析,可以得到:
0x0001 轉爲二進制爲 0001
0x0002 轉爲二進制爲 0010
0x0004 轉爲二進制爲 0100
3 = 2 + 1;//進行或運算
0001 | 0010 ------ 3
0010的值爲:2
0001的值爲:1
通過這個type的值,我們就可得到:該用戶選擇的是第1、2個屬性,此時服務返回視頻類型爲1,2的就OK了。
很感謝26級辦事員、Curry30丶丶丶的指正,常量定義採用十六進制,之前在算的時把它也寫成來十六進制,在進行或運算時是按二進制位計算。。