Đối tượng Symbol được sử dụng để chỉ định một toán tử hoặc mã định danh được khai báo trong ngôn ngữ lập trình Dart. Nói chung, chúng ta không cần sử dụng các biểu tượng trong khi lập trình Dart, nhưng chúng rất hữu ích cho các API. Nó thường đề cập đến số nhận dạng theo tên, bởi vì tên số nhận dạng có thể khác nhau nhưng không phải là ký hiệu nhận dạng.
Các bài viết liên quan:
Ký hiệu Dart là tên chuỗi động được sử dụng để lấy siêu dữ liệu từ thư viện. Nó chủ yếu tích lũy kết nối giữa các chuỗi có thể đọc được của con người được tăng cường để sử dụng bởi máy tính.
Các biểu tượng có một thuật ngữ được gọi là Reflection; nó là một kỹ thuật được sử dụng cho siêu dữ liệu tại thời điểm chạy, ví dụ – số phương thức được sử dụng trong lớp, số lượng hàm tạo trong một lớp hoặc số lượng đối số trong một hàm.
Thư viện dart: mirror có tất cả các lớp liên quan đến phản xạ. Nó có thể được sử dụng với các ứng dụng dòng lệnh cũng như các ứng dụng web.
Cú pháp –
Biểu tượng băm (#) , theo sau là tên được sử dụng để xác định Biểu tượng trong Dart . Cú pháp được đưa ra dưới đây.
Cú pháp:
- Symbol obj = new Symbol ( “name” )
Ở đây, mã định danh hợp lệ như hàm, lớp hợp lệ, tên thành viên công cộng hoặc tên thư viện có thể được sử dụng thay cho giá trị tên .
- #radix
- #bar
Hãy hiểu ví dụ sau.
library foo_lib; // tên libarary có thể là một ký hiệu Class Foo { // tên lớp có thể là một ký hiệu m1 () { // tên phương thức có thể là một ký hiệu print ( "Trong m1" ); } m2 () { print ( "Trong m2" ); } m3 () { print ( "Trong m3" ); } }
Trong đoạn mã trên, chúng ta đã khai báo một lớp Foo trong thư viện foo_lib. Class chứa các phương thức m1, m2 và m3. Chúng tôi lưu tệp trên dưới dạng foo.dart.
Bây giờ, chúng tôi đang tạo tệp FooSymbol.dart mới và chạy đoạn mã sau.
import 'dart:core'; import 'dart:mirrors'; import 'Foo.dart'; main() { Symbol lib = new Symbol("foo_lib"); //library name stored as Symbol Symbol clsToSearch = new Symbol("Foo"); // class name stored as Symbol if(checkIf_classAvailableInlibrary(lib, clsToSearch)) // searches Foo class in foo_lib library print("class found.."); } bool checkIf_classAvailableInlibrary(Symbol libraryName, Symbol className) { MirrorSystem mirrorSystem = currentMirrorSystem(); LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); if (libMirror != null) { print("Found Library"); print("checkng...class details.."); print("No of classes found is : ${libMirror.declarations.length}"); libMirror.declarations.forEach((s, d) => print(s)); if (libMirror.declarations.containsKey(className)) return true; return false; } }
Ví dụ – 2 : In số lượng các phương thức phiên bản của class, trong ví dụ sau, The Dart cung cấp xác định Class trước, giúp chúng tôi hiển thị số lượng các phương thức phiên bản của class
import 'dart:core'; import 'dart:mirrors'; import 'Foo.dart'; main() { Symbol lib = new Symbol("foo_lib"); Symbol clsToSearch = new Symbol("Foo"); reflect_InstanceMethods(lib, clsToSearch); } void reflect_InstanceMethods(Symbol libraryName, Symbol className) { MirrorSystem mirrorSystem = currentMirrorSystem(); LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); if (libMirror != null) { print("Found Library"); print("checkng...class details.."); print("No of classes found is : ${libMirror.declarations.length}"); libMirror.declarations.forEach((s, d) => print(s)); if (libMirror.declarations.containsKey(className)) print("found class"); ClassMirror classMirror = libMirror.declarations[className]; print("No of instance methods found is ${classMirror.instanceMembers.length}"); classMirror.instanceMembers.forEach((s, v) => print(s)); } }
kết quả:
Found Library checkng...class details.. No of classes found is : 1 Symbol("Foo") found class No of instance methods found is 8 Symbol("==") Symbol("hashCode") Symbol("toString") Symbol("noSuchMethod") Symbol("runtimeType") Symbol("m1") Symbol("m2") Symbol("m3")
Chuyển đổi Symbol thành chuỗi
Chúng ta có thể chuyển đổi biểu tượng Dart thành chuỗi bằng cách sử dụng lớp MirrorClass cài sẵn, được cung cấp bởi gói dart: mirror. Hãy hiểu ví dụ sau.
import 'dart:mirrors' void main () { Symbol lib = new Symbol ( "foo_lib" ); String name_of_lib = MirrorSystem.getName (lib); in (lib); print (name_of_lib); }