Grammaire de fléchettes pour ceux qui ne connaissent que Python

introduction

Pour ceux qui ne connaissaient pas Python, nous avons résumé la grammaire de Dart. Je me suis concentré uniquement sur les différences avec Python. Je vise un niveau où je peux comprendre le code de l'application simple de Flutter.

Si vous avez des erreurs, n'hésitez pas à commenter!

Une grande différence avec Python

  1. Dans Dart, vous devez absolument définir une fonction nommée «main» dans le fichier. En effet, il est automatiquement appelé en premier lorsque le fichier est exécuté. Puisque le programme est écrit comme ... en appelant une autre fonction à partir de la fonction principale, fondamentalement tout le traitement est écrit dans la fonction. (Bien sûr, les variables de classe peuvent être définies en dehors de la fonction.

  2. Python est typé dynamiquement, mais Dart prend en charge le typage dynamique et statique. Le typage statique consiste à spécifier dans le code le type de l'objet qui sera inclus dans la variable ou la valeur de retour. Le typage dynamique est le contraire.

** Dans l'explication suivante, la fonction principale est omise par souci de simplicité. ** **

Règles de base

En gros, vous devez écrire un point-virgule à la fin de la ligne.

print("hoge");

Décrivez l'unité avec «{}» au lieu d'un retrait. Il semble que vous n'ayez pas besoin d'un point-virgule après le crochet du milieu.

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

commentaire

// coment

/* hoge
hoge
hoge
*/

///document
///document

variable

Vous devez définir la variable en utilisant var avant de faire l'affectation.

var hoge; 

Les définitions et les affectations peuvent également être écrites sur une seule ligne.

var hoge = 0;

Au lieu de «var», il peut être défini en spécifiant le type. Dans ce cas, la variable ne peut pas être affectée en tant qu'objet de ce type.

int hoge = 0;

Si vous ajoutez un trait de soulignement au début, il sera traité comme privé et vous ne pourrez pas y accéder depuis l'extérieur de la classe.

int _hoge = 2; 

Comme Python, l'affectation est "comme coller un autocollant de nom". (Passer par référence) Par conséquent, Exemple de phénomène se produit. Les spécifications de Coco Rahen semblent être les mêmes.

constant

Vous pouvez définir des constantes en utilisant const et final. J'ai résumé la différence entre les deux.

Qualification Utiliser correctement(Vue personnelle) La description
final Lorsqu'il n'est pas attribué en même temps que la définition. Cela signifie: "Une fois que vous associez un objet à une variable, cette variable ne peut être associée à aucun autre objet." cependant,finalLa valeur ne peut pas être attribuée au moment de l'ajout. De plus, il est possible de changer la position de la zone mémoire sans la changer (comme changer les éléments d'un tableau).
const Lors de la substitution en même temps que la définition. constDans le cas de, la modification du contenu de la zone mémoire n'est pas du tout autorisée. En d'autres termes, il est impossible de modifier les éléments du tableau. Il est nécessaire de se substituer lorsque vous obtenez un emploi.

Il n'est pas nécessaire d'ajouter «var» car il est utilisé au moment de la définition en premier lieu. Il comprend également le sens de la définition.

final hoge;

Bien sûr, vous pouvez également spécifier le type.

const int hoge =0;

Incorporer des variables dans des chaînes

Vous pouvez incorporer une variable dans une chaîne en écrivant le nom de la variable après la marque dollar «$». S'il ne s'agit pas d'un type String, il est automatiquement converti en type String.

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

Si vous souhaitez incorporer une expression au lieu d'une variable, placez l'expression entre accolades.

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

Conversion de type

Lors de la conversion du type String en type int, procédez comme suit.

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

Lors de la conversion du type int au type String, procédez comme suit. Si vous voulez convertir pour incorporer dans une chaîne, utilisez [Code ci-dessus](# Incorporer des variables dans une chaîne).

String oneAsString = 1.toString();

une fonction

Il n'y a pas de formulation particulière pour déclarer la définition de la fonction.

hoge(int number){
  return number;
}

Vous pouvez déclarer le type de retour avant le nom de la fonction. Écrivez comme «void» qui ne renvoie pas de valeur de retour.

int hoge(int number){
  return number;
}

S'il n'y a qu'une seule ligne de traitement dans la fonction, vous pouvez écrire du code facile à lire en utilisant la flèche =>. => Expression est une manière simplifiée d'écrire {expression de retour;}.

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

Arguments nommés

Les arguments formels entre accolades peuvent être passés en spécifiant l'argument formel. Les arguments nommés sont inclus dans la catégorie d'arguments facultatifs et peuvent être omis. S'il est omis, «null» est renvoyé. Contrairement à Python, vous ne pouvez passer un argument formel qu'avec un argument nommé.

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

Si vous ne voulez pas l'omettre, vous pouvez le forcer en ajoutant «@ required». Cependant, vous devez importer package: meta / meta.dart pour utiliser cette annotation.

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

Lors de l'appel, utilisez les deux points : pour spécifier l'argument.

hoge(name : "Mike");

opérateur

Parmi les principaux opérateurs, seuls ceux qui diffèrent entre Python et Dart sont résumés.

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

??= L'un des opérateurs d'affectation. Puisqu'il est courant d'effectuer un processus spécifique lorsqu'il est nul, un opérateur pratique est fourni. Cet opérateur effectue le traitement des affectations uniquement lorsque le côté gauche est nul.


int a;
a ??= 3;

Enfin, 3 remplace a.

?? Similaire à l'opérateur ci-dessus, mais il s'agit d'une classe d'expressions qui renvoient une valeur. Renvoie le côté droit lorsque le côté gauche est nul.

int a;
print(a ?? 3)

3 est émis vers la console.

Déclaration de contrôle

Fondamentalement, la condition doit être placée dans ().

if

C'est la seule différence.

Dart Python
else if elif

syntaxe alternative pour if-else

valeur booléenne? Expression: Utilisé sous forme d'expression. Renvoie l'expression du côté gauche des deux-points lorsque la valeur booléenne est True et renvoie l'expression du côté droit lorsque False.

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

Dans ce cas, Oui est émis.

for

La partie condition s'écrit «(définition et affectation de variable; condition de continuation; traitement de continuation)».

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

Il prend également en charge l'écriture similaire au code Python.

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

switch

Il y a certaines choses, mais je ne l'ai pas utilisé en Python, je vais donc l'omettre pour le moment.

import

En Python, spécifiez le nom du package ou du format, mais dans Dart, spécifiez l'URI. Étant donné que l'URI est une chaîne de caractères et non un identificateur, il est placé entre guillemets simples ou doubles. À propos, URI est une évolution de l'URL, et c'est une notation créée sur la base de l'idée de "Donnons à tout un nom comme URL en utilisant des schémas autres que http et https utilisés dans l'URL!" Méthode. La structure URI est [Scheme: Path]. [^ 1] Le schéma d'utilisation des packages est package, et lors de l'utilisation de la bibliothèque intégrée de Dart est dart.

Si vous souhaitez simplement lire un autre fichier de fléchettes, entrez le chemin absolu ou le chemin relatif.

Annotation (anciennement desserrée!)

Les instructions qui commencent par «@» sont appelées des annotations et sont utilisées pour attribuer des propriétés spécifiques aux méthodes, etc. C'est comme un décorateur en Python.

classe

Variables de classe et variables d'instance

La différence entre les variables de classe et les variables d'instance est de savoir s'il faut ou non se qualifier avec static. Lorsqu'elle est modifiée, elle est traitée comme une variable de classe et peut être traitée comme une variable commune à toutes les classes. L'endroit à définir est directement sous la classe pour les variables de classe et les variables d'instance. Au contraire, il ne peut être défini que directement sous la classe.

Si vous avez des doutes sur les classes Python [Mon travail ici](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"; //Variable de classe
  int age; //Variable d'instance
  String name; //Variable d'instance
}

this

Contrairement à Python, il n'est pas nécessaire de donner une instance à une méthode comme argument de self. Dans Dart, il s'agit d'une variable spéciale qui se renvoie elle-même lorsqu'elle est utilisée dans une méthode.

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

constructeur

  1. Exactement le même nom que la classe

  2. Le type de retour n'est pas spécifié

  3. Aucune valeur de retour

Une méthode qui satisfait tout ce qui précède est reconnue comme un constructeur.

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

Diverses fonctions du constructeur ci-dessous

Sucre syntaxique

Si vous passez une variable d'instance à l'argument du constructeur, le processus d'affectation sera exécuté automatiquement. C'est exactement le même que le code ci-dessus.

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

Constructeur nommé

Dans Dart et Python, il n'y a pas de surcharge (une fonction qui définit un constructeur du même nom et l'utilise automatiquement en fonction du nombre de variables). Comme alternative, vous pouvez créer plusieurs constructeurs avec nom de classe.nom arbitraire (). Cependant, lors de l'instanciation, il doit être instancié en tant que nom de classe incluant son nom.

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

Constructeur constant

Il est utilisé lorsque vous souhaitez instancier un objet dont la valeur de variable ne change pas. Il est nécessaire de rendre toutes les variantes constantes et de préfixer le constructeur avec const.

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

Redirection du constructeur

En écrivant un autre constructeur après les deux points, vous pouvez appeler un autre constructeur et toucher le processus avec le bâton. Dans ce cas, cela se renvoie lui-même, c'est-à-dire Person, donc nous passons «" gest "» au constructeur Person.

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

Héritage

En Python, la classe parente est décrite dans (), mais dans Dart, elle est décrite après ʻextends`.

class Person{
  int age;
  String name;
}

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

super

super renvoie la classe parente. Vous pouvez penser que la super partie est déformée en tant que nom de classe, donc si vous faites super (), vous appellerez le constructeur de la classe parent.

La grande différence avec Python est que ** super ne peut pas être utilisé dans le constructeur **. Utilisez des redirections de constructeur pour éviter cela.

Lors de l'appel du constructeur de la classe parent, cela ressemble à ceci. Nous utilisons également Constructor Redirect (#Constructor Redirect) et Syntactic sugar (# syntactic-sugar syntax utile).

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);//Ici
}

passer outre

Vous devez ajouter «@ override» comme annotation sur la ligne ci-dessus.

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

setter/getter

Je ne suis toujours pas sûr. Étudiera. .. .. Je ne vois pas grand-chose dans le code Flutter.

assert()

Si l'expression passée à l'argument est «false», une erreur est émise. Il semble être utilisé pendant le développement. Ce code est ignoré sauf pour le débogage. J'obtiens une erreur avec le code suivant.

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

Site référencé

Dart documentation | Dart

DartPad

Introduction à Dart 2 pour les débutants

À propos des constructeurs Dart | Developers.IO

[^ 1]: C'est la partie chemin, mais dans le cas de http, le début du chemin est «//», non? Cela semble être une règle uniquement lorsque le schéma est http.

Recommended Posts

Grammaire de fléchettes pour ceux qui ne connaissent que Python
Pour ceux qui veulent écrire Python avec vim
Pour ceux qui ne peuvent pas installer Python sur Windows XP
Grammaire de base Python pour les débutants
[Python] Exemple de code pour la grammaire Python
Extraire uniquement Python pour le prétraitement
Pour ceux qui ont du mal à dessiner des graphiques avec python
Notes de grammaire minimales pour écrire Python
Créer un environnement Python pour ceux qui veulent devenir des data scientists 2016
Technique Python pour ceux qui veulent se débarrasser des débutants
Une note à ceux qui utilisent Python dans Visual Studio (moi)
AWS ~ Pour ceux qui l'utiliseront ~
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Rejoignez Azure avec Go ~ Pour ceux qui veulent démarrer et connaître Azure avec Go ~
Pour ceux qui veulent apprendre Excel VBA et se lancer avec Python
[Résolu] J'ai une question pour ceux qui connaissent la mécanisation de Python.
Points à garder à l'esprit lors de l'utilisation de Python pour ceux qui utilisent MATLAB
5 raisons pour lesquelles le traitement est utile pour ceux qui veulent se lancer avec Python
Mémo n ° 4 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Grammaire de méthode instantanée pour Python et Ruby (étude)
Pour ceux qui ont fait des outils de configuration pip
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 6 pour les débutants Python à lire "Explication détaillée de la grammaire Python"
Mémo n ° 5 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Cours de logiciels pour ceux qui commencent à rechercher l'espace
30/10/2016 else pour Python3> pour:
python [pour moi]
vérification de la grammaire python
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[Pour ceux qui maîtrisent d'autres langages de programmation] 10 points pour rattraper les points Python
Notes de grammaire Python
Grammaire de base Python3
❤️ Blogueurs ❤️ "Beloved BI" ❤️ Commençons ❤️ (pour ceux qui peuvent créer des graphiques avec Python)
Pour ceux qui débutent en programmation mais qui ont décidé d'analyser les données avec Python
Construction d'environnement pour ceux qui veulent étudier Python facilement avec VSCode (pour Mac)
Pour ceux qui auraient dû installer janome correctement avec Python mais qui obtiennent une erreur
Points ennuyeux pour ceux qui veulent présenter Ansible
[Pour les débutants] Apprenez la grammaire de base Python gratuitement en 5 heures!
Pour ceux qui obtiennent une erreur de clé: 'length_seconds' sur pytube
Pour ceux qui ont des problèmes car NFC est lu à l'infini lors de la lecture de NFC avec Python
Connaissance de ceux qui ne pensent qu'à exécuter le SDK Qore sur un Mac
Procédure de construction de l'environnement pour ceux qui ne sont pas familiarisés avec le système de gestion de version python