Heim >Web-Frontend >js-Tutorial >Zusammenfassung der Dart-Grundwissenspunkte
1. Dart-Syntax
Vscode, Plug-Ins installieren: Dart, Code Runner
rrree3 .Dart-Variablen
Dart ist eine leistungsstarke Skriptsprache, die keine Typen vordefinieren muss und automatisch Typen ableitet
In Dart definierte Variablen können über das Schlüsselwort var
Typprüfung existiert in Dart, wie zum Beispiel:main(){ print('你好,dart'); } // 表示main方法没有返回值 void main(){ print('你好,dart'); }4. Dart-Variablen final const kann Konstanten definieren final kann beginnen Ohne einen Wert zuzuweisen, kann es nur einmal zugewiesen werden. Und final hat nicht nur die Eigenschaften von const-Konstanten zur Kompilierungszeit, sondern das Wichtigste ist, dass es sich um eine Laufzeitkonstante handelt, und final ist eine verzögerte Initialisierung wird nicht vor der ersten Verwendung zur Laufzeit initialisiert Zum Beispiel:
var str = 'this is var'; String str = 'this is string'; int str = 123;5. Dart-Datentyp Zahlen: int double Strings: String
const NUM = 123; final Time = new DateTime.now();Booleans( Boolean): bool
如:var str = 'this is a string'; String str = 'this is a string'; // 定义多行字符串 String str = ''' my name is wq; my age is 23; '''; // 字符串拼接 String name = 'wq'; int age = 23; String myInfo = '我的名字叫$name,我今年$age岁'; // 注意:如果使用+实现字符串拼接,那么必须要是同类型的数据 String firstName = '王'; String lastName = '清'; String myInfo = lastName + ':' + firstName;Liste (Liste): Es ist ein Array in js
bool flag = true;Karten (Wörterbuch): Karte ist ein Objekt, das mit verknüpft ist Schlüssel-Wert-Paare
// 第一种定义List的方式 var list1 = [1,2,3]; print(list1.length); // 第二种定义List的方式 var list = new List(); list.add(1); list.add(2); // 定义List指定元素类型 var list = new List<String>(); list.add('王清');6. Typkonvertierung 1) Konvertierung zwischen Zahlen- und String-Typen ①Number wird in den String-Typ toString() konvertiert
// 第一种定义Map var person = { "name": "王清", "age": 23 }; print(person['name']); // 第二种定义Map var p = new Map(); p['name'] = '王清'; print(p); 问:如何判断类型?(关键字 is) var str = '123'; if (str is String) { print('字符串类型'); } else if (str is int) { print('数值类型'); } 注意: 取整运算符 如:print(12~/5); // 2 为空赋值 如:int b; b??=23; print(b); // 23 解释:如果b为空的话就赋值23 int a; int b = a??10; print(b); // 10②String wird in den Zahlentyp parse konvertiert
int num = 12; print(num.toString());2) Andere Typen in den booleschen Typ konvertieren
String str = '123'; print(int.parse(str)); print(double.parse(str));7.List Gemeinsame Attribute: Länge: Länge umgekehrt: umgedreht var list = [1,2,3]; print(list.reversed.toList()); isEmpty: ob es leer ist isNotEmpty: Ob es nicht leer ist Häufig verwendete Methoden: add(): Ein Element hinzufügen, es kann nur ein Element hinzugefügt werden addAll(): Liste zusammenfügen list.addAll([ 1,2,3]) indexOf(): Daten durchsuchen, den Index des zurückgegebenen Elements finden, falls nicht gefunden, zurückgeben -1remove(): Das angegebene Element löschen out out out out out Throughunder out through out ‐ to ‐ ‐‐‐ , Die Elemente dazwischen sind 1 insert(index,value): Element am angegebenen Index einfügen insertAll(index,list): Liste am angegebenen Index einfügen list.insertAll(2 , [100,1]); toList(): Andere Typen in Listen konvertieren join(): Liste in String konvertieren String strList = list.join('-'); split(): Konvertieren die Zeichenfolge in List8.Set Set ist eine ungeordnete und sich nicht wiederholende Menge, sodass Daten nicht durch Indizes abgerufen werden können. Die wichtigste Funktion besteht darin, Duplikate aus der Liste zu entfernen Gemeinsame Attribute: isEmpty: ob es leer ist isNotEmpty: ob es nicht leer ist first: gibt das erste An-Element zurück last: Gibt das letzte Element zurück length: length Allgemeine Methoden: addAll: Liste hinzufügen und in Set konvertieren enthält: Abfrage, ob es enthält ein einzelnes Element set.contains(1) enthältAlle: Fragt ab, ob es mehrere Elemente enthält set.containsAll([1,2]) Unterschied: Gibt zwei verschiedene Elemente zurück, set1. Differenz(set2).toList() Schnittmenge: Gibt zwei Elemente mit den gleichen Elementen zurück Vereinigung: Enthält alle Elemente der beiden Mengen
①isEmpty:判断当前字符串是否为空 String str = ''; print(str.isEmpty); ②未赋值 var myNum; print(myNum == null); // true ③为0 var myNum=0; print(myNum ==0); // true ④为NaN var myNum = 0/0; print(myNum.isNaN); // trueklar: klar firstWhere: Fragen Sie den ersten qualifizierten Wert in Vorwärtsrichtung gemäß der Bedingung
Set set1 = [1,2,3].toSet(); Set set2 = [2,3,4].toSet(); print(set1.union(set2).toList()); // [1,2,3,4]ab. lastWhere: Fragen Sie den ersten qualifizierten Wert in Rückwärtsrichtung gemäß der Bedingung
Set set1 = [1,2,100,200,300,3].toSet(); var list = set1.firstWhere((value){ return value > 100; }); print(list); // 200ab. qualifizierte Elemente löschen
Set set1 = [1,2,100,200,300,3].toSet(); var list = set1.firstWhere((value){ return value > 100; }); print(list); // 300retainWhere: qualifizierte Elemente beibehalten
Set set1 = [1,2,100,200,300,3].toSet(); set1.removeWhere((value){ return value > 100; }); print(set1); // {1, 2, 100, 3}retainAll: nur den aktuellen Wert beibehalten
Set set1 = [1,2,100,200,300,3].toSet(); set1.retainWhere((value){ return value > 100; }); print(set1); // {200,300}removeAll: den aktuellen Wert löschen
Set set1 = [1,2,100,200,300,3].toSet(); set1.retainAll([1,2]); print(set1); // {1,2}Deduplizierung :
Set set1 = [1,2,100,200,300,3].toSet(); set1.removeAll([1,2]); print(set1); // {100,200,300,3}9. Map (Mapping) ist ein ungeordnetes Schlüssel-Wert-Paar Allgemeine Attribute: Schlüssel: Alle Schlüsselwerte abrufen Werte: Alle Wertwerte abrufen isEmpty: ob es leer ist isNotEmpty: ob es nicht leer ist Allgemeine Attribute: addAll(): Fügen Sie mehrere Schlüssel-Wert-Paare hinzu
"love":["game","coding"],
Schlüssel(Schlüssel): Ob Für diesen Schlüssel gibt es ein Schlüssel-Wert-Paar
Zum Beispiel: m.containsKey("name")
10, wobei alle alle (gemeinsam mit List, Set, Map) sind.
Allgemeine Schleife:
List list = [100,200,300,400];
for(var i in list){
print(i); // 100 200 300 400
}
forEach-Schleife :
List list = [100,200,300,400];
list.forEach((value) => print( value));
list.forEach((value){
}); 00];
var newList = list.map((value){
Rückgabewert * 2;
});
print(newList.toList()); // [200,400,600,800]
where loop:
List list = [100,200,300,400];
var newList = list.where((value){
return value > 200;
});
print(newList.toList()); // [300,400]
beliebige Schleife:
Bedeutung: Bestimmen Sie, ob Elemente vorhanden sind, die die Bedingungen erfüllen. Wenn vorhanden, kehren Sie zurück true
List list = [100,200,300,400];
var flag = list.any((value){
return value > 200;
} );
print(flag);
jede Schleife:
Bedeutung: Bestimmen Sie, ob alle Elemente die Bedingungen erfüllen. Wenn alle Elemente übereinstimmen, wird true zurückgegeben 🎜>
}); print(flag); // true11. Funktionen, Parameter, Abschlüsse usw. 1) Grundlegendes FunktionsformatGeben Sie den Typmethodennamen zurück (Parameter 1, Parameter 2 ...) {
Methodenkörper
Rückgabewert zurückgeben
}
① Definieren Sie die Parametertyp als int. Wenn es sich um andere Typen handelt, wird ein Fehler gemeldet.
var n = getNum(60);
print(n)
Return '$ Name $ Age $ Sex'; .
Print (Printuserinfo ('Wang Qing', 20));
③ Standardparameter
String Printuserinfo (String name, [int Age = 10]) {
;
⑥Pfeilfunktion: Beachten Sie, dass Pfeilfunktionen keine mehrzeiligen Anweisungen unterstützen
list.forEach((value)=>print(value));
Kleine Kenntnisse Punkte:Ist es ein Wert oder eine wunderbare Zahl?
){
print( str);
('IIFE'); wird die globalen
Eigenschaften lokaler Variablen verschmutzen: nicht ansässig Der Speicher wird durch den Garbage-Collection-Mechanismus recycelt und verschmutzt nicht die globalen
Möchten Sie die Funktion erreichen, dass sie im Speicher resident ist, werden die globalen
Klassenobjekte
Alles in Dart ist ein Objekt und alle Objekte erben von der Object-Klasse. Dart ist eine objektorientierte Sprache, die Klassen und Einzelvererbung verwendet. Alle Objekte sind Instanzen von Klassen und alle Klassen sind Unterklassen of Object wie zum Beispiel: class Person{ String name; int age; // KonstruktorPerson(String name,int age){ this.name = name; This.age =.
this.name = name;
this.age = age;
}
// Konstruktor Es kann wie folgt abgekürzt werden
Person (this.name,this.age);
void getInfo(){
print("${this.name}---${this. age}");
Person p2 = new Person.now('Wang Sicong', 30);
p2.getInfo(); Klasse
2. Referenz
import 'Person.dart';
void main(){
Person p = new Person.now(' Wang Qing', 23); Es gibt keine Zugriffsmodifikatoren wie privat, öffentlich und geschützt
Aber wir können _ verwenden, um eine Eigenschaft oder Methode als privat zu definieren
Private Eigenschaften oder Methoden können nicht direkt instanziiert und aufgerufen werden, sondern nur intern. Neue zu verwendende Methoden oder Attribute
Die Funktion kann wie folgt abgekürzt werden: Person(this._name,this .age); // Benanntes Konstruktoralter) {this.age = Age;
}
void Getinfo () {
Printttt ("${this._name}---${this.age}"); In Dateien extrahiert 1) Getter- und Setter-Modifikatoren in der Klasse: class Rect{ num height; num width; Rect(this.height, this.width); set areaWidth(value){ this.height = value; }
<. return this.height this.void main>
Rect r = new Rect(10, 10);
// Rufen Sie die Get-Modified-Methode auf, indem Sie auf Eigenschaften zugreifen
print(r.area);
// Aufrufsatz, um dem Attribut einen Wert zuzuweisen, indem ein Wert zugewiesen wird
r.areaWidth = 20;
print(r.area); 2) In Dart, Instanzvariablen
können initialisiert werden, bevor der Konstruktorkörper ausgeführt wird. Klasse Rect{
num height;
num width;
Rect() :height= 10,width=10{
🎜>
Rect r = new Rect(); print(r.area); } 3) Statische Mitglieder ① Verwenden Sie das Schlüsselwort static, um Variablen und Funktionen auf Klassenebene zu implementieren ② Statische Methoden können nicht auf nicht statische Mitglieder zugreifen, und nicht statische Methoden können auf statische Mitglieder zugreifen Klasse Person{void main(){ Person.show(); } 4) Objektoperatoren in Dart: ? Bedingungsoperatorals Typkonvertierung Person(this.name,this.age}'); );. 🎜>
Unabhängig davon, ob p leer ist, wird die Methode oder das Attribut nicht ausgeführt, wenn es leer ist 🎜> p?.show();
Ob das Objekt eine Instanziierung der Klasse ist
if (p is Person) {
🎜> var p1;
p1 =''; p1 als Person).show();
>
..show(); ②子Die Klasse erbt die sichtbaren Attribute und Methoden in der übergeordneten Klasse, erbt jedoch nicht den Konstruktor③ Die Unterklasse kann die Getter- und Setter-Methoden der übergeordneten Klasse überschreiben Zum Beispiel: Klasse Person { Person(this.name,this. Alter ) ; Person.other(this.name,this.age); } Klasse Web erweitert String-Sex; Alter){ this.sex = sex; 🎜 > void run(){
die Methode der übergeordneten Klasse bis super in der Unterklasse
print( 'printInfo of subclass'); Web('Zhang San', 12 ,'Male'); 🎜 >
Abstrakte Klassen in Dart: Abstrakte Klassen werden hauptsächlich zum Definieren von Standards verwendet oder abstrakte Klassenschnittstellen implementieren ①Abstrakte Klassen werden über das Schlüsselwort abstract definiert ② Die abstrakte Methode in Dart kann nicht von Abstract deklariert werden. Wenn eine abstrakte Klasse als Schnittstellenimplementierung verwendet wird, muss sie alle in der abstrakten Klasse definierten Methoden und Attribute implementieren ⑤ Abstrakte Klassen können nicht instanziiert werden, nur Unterklassen, die sie erben, können erweitert und implementiert. Unterschied: ① Wenn Sie die Methoden in der abstrakten Klasse wiederverwenden und verwenden möchten abstrakte Methoden, um das Zeichnen der Selbstklasse einzuschränken, können wir Extends verwenden, um die abstrakte Klasse zu erben ② Wenn Sie die abstrakte Klasse nur als behandeln. Für Standardzwecke verwenden wir Implementierungen, um die abstrakte Klassevoid drink(){
Hund verlängert Tier{
@Ooverride
void Eat () {
Print ('Der Welpe ist void drink(){
void run(){
print(' Let's run~'); ;
d.drink ();
// a.run(); Fehler
}
} Abstrakte Schnittstelle:
abstrakte Klasse DB{
String-URL; 🎜> }
MySQL implementiert DB{
@override
String URL;
🎜> 🎜> PrintA();
Geräte der Klasse C A, B{
@override
@override
printB() {
Funktion ähnlich der Mehrfachvererbung;
Bedingungen für die Verwendung von Mixins:
① Klassen als Mixins können nur von Object erben und nicht von anderen Klassen erben
② Klassen als Mixins können keine Konstruktoren haben
③Eine Klasse kann mehrere Mixins-Klassen mixen
④Mixins sind weder Vererbung noch Schnittstellen, sondern eine brandneue Funktion
Wie zum Beispiel:
Klasse A{
void. printA(){
Klasse B{
Void printb () {
Print ('B');
}
}
Klasse C Erweitert ein 🎜 > }class D with A,B{ } void main(){ >
c.printa (
c.printb ();
d = new d ();
d.printB(); Generics
Verständnis: Generics lösen die Wiederverwendbarkeit von Klassen, Schnittstellen und Methoden und unterstützen unspezifische Datentypen (Typprüfung)
① Generische Methoden
T getData8742468051c85b06f0a0af9e3e506b5c (T-Wert){
print(getData< ;int>(21));
} }
②Generic class
class MyArray8742468051c85b06f0a0af9e3e506b5c{
List list = new List8742468051c85b06f0a0af9e3e506b5c();
void add(T value){
this.list.add(value);
}
}
void main(){
MyArray myArray = new MyArrayf7e83be87db5cd2d9a8a0b8117b38cd4();
myArray.add('wq');
}
③泛型接口
abstract class Cache8742468051c85b06f0a0af9e3e506b5c{
getByKey(String key);
void setBykey( String-Schlüssel,T-Wert);
}
class FileCache8742468051c85b06f0a0af9e3e506b5c erweitert Cache8742468051c85b06f0a0af9e3e506b5c{
@override
getByKey(String key) {
return null;
}
@override
void setBykey(String key, T value) {
print('$key --- $value');
}
}
void main(){
FileCache fc = new FileCachef7e83be87db5cd2d9a8a0b8117b38cd4();
fc.setBykey('wq', '我是文件缓存');
}
15.dart 中 的 库
① 我们 自 定义 的 库
import 'lib/xxx.dart';
②系统内置库
import 'dart:io';
import 'dart:convert';
void main() async{
var result = waiting getDataFromZhihuAPI();
print(result);
}
//api接口: http://news-at.zhihu.com/api/ 3/stories/latest
getDataFromZhihuAPI() async{
//1、创建HttpClient对象
var httpClient = new HttpClient();
//2、创建Uri对象
var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest');
//3、发起请求,等待请求
var request = waiting httpClient.getUrl(uri);
//4、关闭请求,等待响应
var Response =await request.close();
//5、解码响应的内容
return waiting Response.transform(utf8.decoder).join();
}
③Pub管理系统中的库
第一步:从下面网址找到要的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
第二步: 创建一个pubspec. yaml文件,内容如下:
Name: xxx
Beschreibung: Ein neues Flattermodulprojekt.
Abhängigkeiten:
http: ^0.12.1
:http/http.dart' als http;import 'dart:convert' als konvertieren; void getData() async { var url = 'http://www.phonegap100.com/appapi.php?a= getPortalList&catid=20&page=1'; var Response = waiting http.get(url); if (response.statusCode == 200) {
🎜> }
①Partial import
Import 'lib/mymath.dart' show getName; // Nur die getname-Methode einführenImport 'lib/mymath.dart' hide getname; // Nur getName-Methode ausblenden
. import 'XXX .dart' verzögert als }
Das obige ist der detaillierte Inhalt vonZusammenfassung der Dart-Grundwissenspunkte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!