Rate this post

Đố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 phi tiêu 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:

  1. 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 .

  1. #radix  
  2. #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);   
}  

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now