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!
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.
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é. ** **
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");
}
// coment
/* hoge
hoge
hoge
*/
///document
///document
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.
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,final La 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. | const Dans 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;
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}");
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();
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");
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");
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.
Fondamentalement, la condition doit être placée dans ()
.
if
C'est la seule différence.
Dart | Python |
---|---|
else if |
elif |
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.
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.
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}");
}
}
Exactement le même nom que la classe
Le type de retour n'est pas spécifié
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
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);
}
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";
}
}
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);
}
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");
}
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
}
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);
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