Dart-Grammatik für diejenigen, die nur Python kennen

Einführung

Für diejenigen, die Python noch nicht kennen, haben wir Darts Grammatik zusammengefasst. Ich habe mich nur auf die Unterschiede zu Python konzentriert. Ich strebe ein Level an, in dem ich den Code der einfachen App von flattern verstehen kann.

Wenn Sie Fehler haben, können Sie diese gerne kommentieren!

Ein großer Unterschied zu Python

  1. In Dart müssen Sie unbedingt eine Funktion namens "main" in der Datei definieren. Dies liegt daran, dass es automatisch zuerst aufgerufen wird, wenn die Datei ausgeführt wird. Da das Programm wie ... geschrieben wird, indem eine andere Funktion von der Hauptfunktion aufgerufen wird, wird im Grunde die gesamte Verarbeitung in die Funktion geschrieben. (Natürlich können Klassenvariablen außerhalb der Funktion definiert werden.

  2. Python ist dynamisch typisiert, aber Dart unterstützt sowohl dynamische als auch statische Typisierung. Bei der statischen Typisierung wird der Typ des Objekts angegeben, das in der Variablen enthalten sein soll, oder der Rückgabewert im Code. Dynamisches Tippen ist das Gegenteil.

** In der folgenden Erläuterung wird die Hauptfunktion der Einfachheit halber weggelassen. ** ** **

Grundregeln

Grundsätzlich müssen Sie am Ende der Zeile ein Semikolon schreiben.

print("hoge");

Beschreiben Sie die Einheit mit {} anstelle von Einzug. Es scheint, dass Sie nach der mittleren Klammer kein Semikolon benötigen.

hoge(){
  print("hoge");
}

Kommentar

// coment

/* hoge
hoge
hoge
*/

///document
///document

Variable

Sie müssen die Variable mit var definieren, bevor Sie die Zuweisung vornehmen.

var hoge; 

Definitionen und Zuordnungen können auch in einer Zeile geschrieben werden.

var hoge = 0;

Anstelle von "var" kann es durch Angabe des Typs definiert werden. In diesem Fall kann die Variable nicht als Objekt dieses Typs zugewiesen werden.

int hoge = 0;

Wenn Sie zu Beginn einen Unterstrich hinzufügen, wird dieser als privat behandelt und Sie können von außerhalb der Klasse nicht darauf zugreifen.

int _hoge = 2; 

Wie bei Python ist die Zuweisung "wie das Einfügen eines Namensaufklebers". (Referenz übergeben) Daher tritt Beispielphänomen auf. Die Spezifikationen von Coco Rahen scheinen gleich zu sein.

Konstante

Sie können Konstanten mit "const" und "final" definieren. Ich habe den Unterschied zwischen den beiden zusammengefasst.

Qualifikation Richtig verwenden(Persönliche Ansicht) Erläuterung
final Wenn nicht gleichzeitig mit der Definition zugewiesen. Dies bedeutet: "Sobald Sie ein Objekt einer Variablen zugeordnet haben, kann diese Variable keinem anderen Objekt zugeordnet werden." Jedoch,finalDer Wert kann zum Zeitpunkt des Hinzufügens möglicherweise nicht zugewiesen werden. Darüber hinaus ist es möglich, die Position des Speicherbereichs zu ändern, ohne ihn zu ändern (z. B. die Elemente eines Arrays zu ändern).
const Beim Ersetzen gleichzeitig mit der Definition. constIm Falle von ist die Änderung des Inhalts des Speicherbereichs überhaupt nicht zulässig. Mit anderen Worten, es ist unmöglich, die Elemente des Arrays zu ändern. Es ist notwendig zu ersetzen, wenn Sie einen Job bekommen.

Es ist nicht erforderlich, "var" hinzuzufügen, da es zum Zeitpunkt der Definition an erster Stelle verwendet wird. Es enthält auch die Bedeutung des Definierens.

final hoge;

Natürlich können Sie auch den Typ angeben.

const int hoge =0;

Einbetten von Variablen in Zeichenfolgen

Sie können eine Variable in eine Zeichenfolge einbetten, indem Sie den Variablennamen nach der Dollarmarke "$" schreiben. Wenn es sich nicht um einen String-Typ handelt, wird er automatisch in einen String-Typ konvertiert.

var hoge = 0;
print("hoge refers $hoge");

Wenn Sie einen Ausdruck anstelle einer Variablen einbetten möchten, schließen Sie den Ausdruck in geschweifte Klammern ein.

print("1 + 1 = ${1 + 1}");

Typkonvertierung

Gehen Sie beim Konvertieren vom String-Typ zum Int-Typ wie folgt vor.

var one = int.parse('1');

Gehen Sie beim Konvertieren vom Typ int in den Typ String wie folgt vor. Wenn Sie konvertieren möchten, um in eine Zeichenfolge eingebettet zu werden, verwenden Sie [Code oben](# Variablen in Zeichenfolge einbetten).

String oneAsString = 1.toString();

Funktion

Es gibt keinen bestimmten Wortlaut, um die Definition der Funktion zu deklarieren.

hoge(int number){
  return number;
}

Sie können den Rückgabetyp vor dem Funktionsnamen deklarieren. Schreiben Sie als "void", das keinen Rückgabewert zurückgibt.

int hoge(int number){
  return number;
}

Wenn die Funktion nur eine Verarbeitungszeile enthält, können Sie mit der Pfeilmarkierung => einfach zu lesenden Code schreiben. => Ausdruck ist eine vereinfachte Schreibweise {return expression;}.

void main() => print("hoge");

Benannte Argumente

Formale Argumente in geschweiften Klammern können durch Angabe des formalen Arguments übergeben werden. Benannte Argumente sind in der optionalen Argumentkategorie enthalten und können weggelassen werden. Wenn nicht angegeben, wird "null" zurückgegeben. Im Gegensatz zu Python können Sie ein formales Argument nur mit einem benannten Argument übergeben.

int hoge({int number}){
  return number;
}

Wenn Sie es nicht weglassen möchten, können Sie es erzwingen, indem Sie "@ required" hinzufügen. Sie müssen jedoch "package: meta / meta.dart" importieren, um diese Anmerkung zu verwenden.

int hoge({@required int number}){
  return number;
}

Verwenden Sie beim Aufruf den Doppelpunkt :, um das Argument anzugeben.

hoge(name : "Mike");

Operator

Von den Hauptoperatoren werden nur diejenigen zusammengefasst, die sich zwischen Python und Dart unterscheiden.

Dart Python
~/ //
++ +=1
-- -=1
&& and
|| or

??= Einer der Zuweisungsoperatoren. Da es üblich ist, einen bestimmten Prozess auszuführen, wenn er null ist, wird ein praktischer Operator bereitgestellt. Dieser Operator führt die Zuweisungsverarbeitung nur durch, wenn die linke Seite null ist.


int a;
a ??= 3;

Schließlich wird a durch 3 ersetzt.

?? Ähnlich wie der obige Operator, aber dies ist eine Klasse von Ausdrücken, die einen Wert zurückgeben. Gibt die rechte Seite zurück, wenn die linke Seite null ist.

int a;
print(a ?? 3)

3 wird an die Konsole ausgegeben.

Steueranweisung

Grundsätzlich muss die Bedingung in () gesetzt werden.

if

Dies ist der einzige Unterschied.

Dart Python
else if elif

alternative Syntax für if-else

bool value? Expression: Wird in Form eines Ausdrucks verwendet. Gibt den Ausdruck auf der linken Seite des Doppelpunkts zurück, wenn der Bool-Wert True ist, und gibt den Ausdruck auf der rechten Seite zurück, wenn False.

var isPerson = true;
print(isPerson ? "Yes": "No");

In diesem Fall wird Ja ausgegeben.

for

Der Bedingungsteil wird geschrieben als "(Variablendefinition und -zuweisung; Fortsetzungsbedingung; Fortsetzungsverarbeitung)".

for (int number = 0; number < 3; number++){
  print(number);
}

Es unterstützt auch das Schreiben ähnlich wie Python-Code.

var numbers = [0, 1, 2];
for (var number in numbers) {
  print(number); 
} 

switch

Es gibt einige Dinge, aber ich habe es in Python nicht verwendet, deshalb werde ich es vorerst weglassen.

import

Geben Sie in Python den Namen des Pakets oder Formats an, in Dart jedoch den URI. Da URI eine Zeichenfolge und kein Bezeichner ist, wird es in einfache oder doppelte Anführungszeichen gesetzt. URI ist übrigens eine Weiterentwicklung der URL, und es handelt sich um eine Notation, die auf der Idee basiert: "Geben wir allen einen Namen wie URL, indem wir andere Schemata als http und https verwenden, die in URLs verwendet werden!" Methode. Die URI-Struktur lautet [Schema: Pfad]. [^ 1] Das Schema für die Verwendung von Paketen lautet "package", und bei Verwendung der in Dart integrierten Bibliothek ist "dart".

Wenn Sie nur eine andere Dartdatei lesen möchten, geben Sie den absoluten Pfad oder den relativen Pfad ein.

Anmerkung (früher gelockert!)

Anweisungen, die mit "@" beginnen, werden als Anmerkungen bezeichnet und werden verwendet, um Methoden und dergleichen bestimmte Eigenschaften zuzuweisen. Es ist wie ein Dekorateur in Python.

Klasse

Klassenvariablen und Instanzvariablen

Der Unterschied zwischen Klassenvariablen und Instanzvariablen besteht darin, ob mit "statisch" qualifiziert werden soll oder nicht. Wenn es geändert wird, wird es als Klassenvariable behandelt und kann als Variable behandelt werden, die allen Klassen gemeinsam ist. Der zu definierende Ort befindet sich sowohl für Klassenvariablen als auch für Instanzvariablen direkt unter class. Im Gegenteil, es kann nur direkt unter der Klasse definiert werden.

Wenn Sie Zweifel an Python-Klassen haben [Meine Arbeit hier](https://qiita.com/basashi/items/69fee6df0f23f140e91c#q3-%E3%82%AF%E3%83%A9%E3%82%B9% E5% A4% 89% E6% 95% B0% E3% 81% A8% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 82% BF% E3% 83% B3% E3% 82% B9% E5% A4% 89% E6% 95% B0% E3% 81% AE% E9% 81% 95% E3% 81% 84).

class JapanesePerson{
  static String nationality = "Japan"; //Klassenvariable
  int age; //Instanzvariable
  String name; //Instanzvariable
}

this

Im Gegensatz zu Python ist es nicht erforderlich, einer Methode eine Instanz als Argument für sich selbst zuzuweisen. In Dart ist dies eine spezielle Variable, die sich selbst zurückgibt, wenn sie innerhalb einer Methode verwendet wird.

class Person{
  String name;
  void info(){
    print("My name is ${this.name}");
  }
}

Konstrukteur

  1. Genau der gleiche Name wie die Klasse

  2. Der Rückgabetyp ist nicht angegeben

  3. Kein Rückgabewert

Eine Methode, die alle oben genannten Anforderungen erfüllt, wird als Konstruktor anerkannt.

class Person{
  String name;
  Person(name){
      this.name = name;
  }
}

Verschiedene Funktionen des Konstruktors unten

Syntethischer Zucker

Wenn Sie eine Instanzvariable an das Argument des Konstruktors übergeben, wird der Zuweisungsprozess automatisch ausgeführt. Es ist genau das gleiche wie der obige Code.

class Person {
  String name;
  Person(this.name);
}

Benannter Konstruktor

In Dart und Python gibt es keine Überladung (eine Funktion, die einen Konstruktor mit demselben Namen definiert und ihn automatisch entsprechend der Anzahl der Variablen verwendet). Alternativ können Sie mehrere Konstruktoren mit "class name.arbitrary name ()" erstellen. Beim Instanziieren muss es jedoch als Klassenname einschließlich seines Namens instanziiert werden.

class Person{
  String name;
  Person(name){
      this.name = name;
  }
  Person.gest(){
      this.name = "gest";
  }
}

Konstanter Konstruktor

Verwenden Sie diese Option, wenn Sie ein Objekt instanziieren möchten, dessen Variablenwert sich nicht ändert. Es ist notwendig, alle Varianten konstant zu machen und dem Konstruktor "const" voranzustellen.

class Hoge{
  final name;
  const Hoge(this.name); 
}

Konstruktorumleitung

Wenn Sie einen anderen Konstruktor nach dem Doppelpunkt schreiben, können Sie einen anderen Konstruktor aufrufen und den Prozess mit einem Schlagstock berühren. In diesem Fall gibt sich dies selbst zurück, dh Person, also übergeben wir "gest" an den Personenkonstruktor.

class Person{
  String name;
  Person(name){
    this.name = name;
  }
  Person.gest(): this("gest");
}

Erbe

In Python wird die übergeordnete Klasse in "()" beschrieben, in Dart jedoch nach "erweitert".

class Person{
  int age;
  String name;
}

class JapanesePerson extends Person{
  static String nationality = "Japan";
}

super

super gibt die übergeordnete Klasse zurück. Sie können sich vorstellen, dass der Superteil als Klassenname verstümmelt ist. Wenn Sie also "super ()" ausführen, rufen Sie den Konstruktor der übergeordneten Klasse auf.

Der große Unterschied zu Python besteht darin, dass ** super im Konstruktor ** nicht verwendet werden kann. Um dies zu vermeiden, verwenden Sie Konstruktorumleitungen.

Wenn Sie den Konstruktor der übergeordneten Klasse aufrufen, sieht dies folgendermaßen aus. Wir verwenden auch Constructor Redirect (#Constructor Redirect) und Syntactic Sugar (# Syntactic-Sugar nützliche Syntax).

class Person{
    int age;
    String name;
  Person(this.age, this.name);
  info (){
    print("My name is ${this.name}.");
  }
}

class JapanesePerson extends Person{
  static String nationality = "Japan";
  var prefecture;
  JapanesePerson(age, name, this.prefecture): super(age, name);//Hier
}

überschreiben

Sie müssen "@ override" als Anmerkung in die obige Zeile einfügen.

@override
info(){
  print("hoge");
}

setter/getter

Ich bin mir immer noch nicht sicher. Wird studieren. .. .. Ich sehe nicht viel im Flutter-Code.

assert()

Wenn der an das Argument übergebene Ausdruck "false" ist, wird ein Fehler ausgegeben. Es scheint während der Entwicklung verwendet zu werden. Dieser Code wird bis auf das Debuggen ignoriert. Ich erhalte eine Fehlermeldung mit dem folgenden Code.

var n = 3;
assert(n == 1);

Referenzierte Site

Dart documentation | Dart

DartPad

Einführung in Dart 2 für Anfänger

Über Dart-Konstruktoren | Developers.IO

[^ 1]: Es ist der Pfadteil, aber im Fall von http ist der Anfang des Pfads //, richtig? Dies scheint nur dann eine Regel zu sein, wenn das Schema http ist.

Recommended Posts

Dart-Grammatik für diejenigen, die nur Python kennen
Für diejenigen, die Python mit vim schreiben möchten
Für diejenigen, die Python unter Windows XP nicht installieren können
Grundlegende Python-Grammatik für Anfänger
[Python] Beispielcode für die Python-Grammatik
Extrahieren Sie nur Python für die Vorverarbeitung
Für diejenigen, die Probleme beim Zeichnen von Diagrammen mit Python haben
Minimale Grammatiknotizen zum Schreiben von Python
Aufbau einer Python-Umgebung für diejenigen, die Datenwissenschaftler 2016 werden möchten
Python-Technik für diejenigen, die Anfänger loswerden wollen
Ein Hinweis für diejenigen, die Python in Visual Studio verwenden (ich)
AWS ~ Für diejenigen, die es verwenden werden ~
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Treten Sie Azure mit Go ~ bei Für diejenigen, die Azure mit Go ~ starten und kennenlernen möchten
Für diejenigen, die Excel VBA lernen und mit Python beginnen möchten
[Gelöst] Ich habe eine Frage an diejenigen, die mit Python-Mechanisierung vertraut sind.
Dinge, die Sie bei der Verwendung von Python beachten sollten, wenn Sie MATLAB verwenden
5 Gründe, warum die Verarbeitung für diejenigen nützlich ist, die mit Python beginnen möchten
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Sofortige Methodengrammatik für Python und Ruby (Lernen)
Für diejenigen, die Pip-Deinstallationstools durchgeführt haben
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
Memo Nr. 5, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Software-Kurs für diejenigen, die anfangen, den Weltraum zu erforschen
2016-10-30 sonst für Python3> für:
Python [für mich]
Python-Grammatikprüfung
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
[Für diejenigen, die andere Programmiersprachen beherrschen] 10 Punkte, um Python-Punkte nachzuholen
Python-Grammatiknotizen
Grundlegende Grammatik von Python3
❤️ Blogger ❤️ "Beloved BI" ❤️ Los geht's ❤️ (für diejenigen, die mit Python Diagramme erstellen können)
Für diejenigen, die neu in der Programmierung sind, sich aber entschieden haben, Daten mit Python zu analysieren
Umgebungskonstruktion für diejenigen, die Python einfach mit VSCode (für Mac) lernen möchten
Für diejenigen, die Janome ordnungsgemäß mit Python installiert haben sollten, aber eine Fehlermeldung erhalten
Ärgerliche Punkte für diejenigen, die Ansible vorstellen möchten
[Für Anfänger] Lernen Sie in 5 Stunden kostenlos die grundlegende Python-Grammatik!
Für diejenigen, die einen Schlüsselfehler erhalten: 'length_seconds' auf pytube
Für diejenigen, die in Schwierigkeiten sind, weil NFC beim Lesen von NFC mit Python endlos gelesen wird
Kenntnisse über diejenigen, die nur daran denken, das Qore SDK auf einem Mac auszuführen
Verfahren zur Erstellung der Umgebung für diejenigen, die mit dem Python-Versionsverwaltungssystem nicht vertraut sind