0%

[Flutter讀書會]Dart101:Build-inTypes資料型別-Symbol

前提情要

Dart程式語言的資料型別介紹來到最後一篇啦,前面三篇滿滿的內容,筆者都寫到頭昏腦脹,主要是希望趕上讀書會的進度,希望在這週完成Dart程式語言的了解。筆者尚未完成很重要的Function方法、Operators運算子、Control Flow及最重要的Class概念,把這些都釐清楚後,我想進入到Flutter的世界,只要學好xml格式的UI Control配置,我想應該是可以開發一些Demo應用程式了,好興奮阿,就跟著筆者繼續學習這篇的主角Symbol吧。

內容

筆者這邊還是簡單列一下筆者這邊的開發環境

  • 作業系統:Mac OS
  • Dart版本:2.17.6
  • 編輯器:Visual Studio Code

Symbol

看官方文件及搜尋各家部落格的說明後,就是所謂的標示符,經過看範例過程,筆者理解到的是有點像是C#程式語言中的Type,透過GetType取得之後與Reflection反射搭配,取得Assembly的資訊,以更進階,更動態的方式進行程式執行吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import 'dart:core';
import 'dart:mirrors';

void main() {
Symbol libName = new Symbol('dart.core');
MirrorSystem mirrorSystem = currentMirrorSystem();
LibraryMirror libraryMirror = mirrorSystem.findLibrary(libName);
libraryMirror.declarations.forEach((key, value) {print('$key - $value');});
}
// 執行結果
/*
Symbol("_SLASH") - VariableMirror on '_SLASH'
Symbol("_AbstractType") - ClassMirror on '_AbstractType'
Symbol("print") - MethodMirror on 'print'
Symbol("_UPPER_CASE_Z") - VariableMirror on '_UPPER_CASE_Z'
Symbol("_RegExpMatch") - ClassMirror on '_RegExpMatch'
Symbol("_SPACE") - VariableMirror on '_SPACE'
Symbol("WeakReference") - ClassMirror on 'WeakReference'
Symbol("Enum") - ClassMirror on 'Enum'
Symbol("BidirectionalIterator") - ClassMirror on 'BidirectionalIterator'
Symbol("_Uri") - ClassMirror on '_Uri'
Symbol("_scannerTables") - VariableMirror on '_scannerTables'
Symbol("_TypeError") - ClassMirror on '_TypeError'
Symbol("_SimpleUri") - ClassMirror on '_SimpleUri'
以下省略
*/

以上述範例來看,基本上搭配MirrorSystem來做搭配使用,透過LibraryMirror取得指定的library資訊,範例中是取得dart.core這個內建的library,並將其內含的Variable, Methods, Class等等所有宣告列印出來。

結論

筆者這篇結論就是先記著有這樣的東西,到時用到的時候再來深究它吧,筆者本身在寫C#時,很常使用到Reflection開發一些共用library,算熟悉,但是到Dart語言,且要寫在Flutter框架時,還不知道應用場景,到時有用到時再來寫一篇說明其應用,這篇就到這邊了,下篇再見。

參考