Je veux faire quelque chose comme ça, principalement du point de vue d'un ingénieur Java (Java ou Swift), est-ce que je ne peux pas faire ça? Ce seront les astuces à utiliser à ce moment-là.
Java 8 a été annoncé et Kotlin a été officiellement adopté dans Android Studio 3.0, mais lorsqu'un ingénieur qui ne faisait que Java développe des applications iOS avec Xcode, ou un ingénieur qui développait des applications iOS avec Swift est Java Nous espérons que cela vous aidera si vous souhaitez vérifier au niveau de la notation de la langue lorsque vous essayez de développer Android.
Cette page traite principalement de la notation Java / Swift de "contrôle de source", "portée" et "variable". Cet article est basé sur 1.7 pour Java et Swift3 pour Swift, mais nous nous excusons pour les erreurs de notation.
--Comparaison entre Java et Swift (1) Source control / Scope / Variables
Java Il est géré par des packages, et les packages sont (généralement) déterminés selon une hiérarchie par répertoire. Même les classes d'un même projet peuvent être traitées et créées comme des classes distinctes dans Test.class dans le package aaa.bbb.ccc et Test.class dans le package aaa.bbb.xxx.
Cependant, si vous souhaitez utiliser différentes classes de package dans le même projet, vous devez déclarer "import import target" au début du fichier source ou y accéder avec le modificateur complet. Cependant, le package java.lang contient des classes fréquemment utilisées et les classes qu'elles contiennent (String, Integer, etc.) peuvent être utilisées sans être importées explicitement.
python
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList();
java.util.Map<String, String> list = new java.util.HashMap<>();
}
}
Le fichier source doit avoir une extension "* .java". De plus, le fichier source Java ne peut contenir qu'une seule classe publique et le nom du fichier source Java et le nom de la classe publique doivent correspondre.
Swift Dans Swift, le package est déterminé pour chaque module (projet) et le nom du module est déterminé comme espace de noms. Par conséquent, dans le même module, vous pouvez accéder uniquement par nom de classe, quelle que soit la hiérarchie du répertoire ou la source, mais vous devez faire attention aux conflits de nom de classe. À ce stade, lors de l'utilisation d'une classe d'un autre module (par exemple, un projet de bibliothèque), il est nécessaire de déclarer "import import package cible" au début du fichier source ou d'y accéder avec un modificateur complet tel que "target package.class name". il y a.
python
import Foundation
class Main {
var arr:Array = Array<String>()
var date:Foundation.Date = Foundation.Date()
}
Le fichier source doit avoir une extension "* .swift". De plus, contrairement à Java, les fichiers source Swift peuvent recevoir n'importe quel nom de fichier. En outre, plusieurs classes peuvent être définies pour un nom de fichier quelle que soit la portée.
Java En Java, le contrôle d'accès est essentiellement déterminé pour chaque package et classe.
Modificateur d'accès | La description |
---|---|
public | Accessible depuis toutes les classes et packages |
protected | Accessible dans le même package et à partir des sous-classes |
(Aucun modificateur) | Accessible depuis le même package |
private | Uniquement accessible depuis la même classe |
Swift Dans Swift, le contrôle d'accès est essentiellement déterminé pour chaque module et fichier.
Modificateur d'accès | La description |
---|---|
open | Toutes les classes, accessibles à partir de différents modules(Swift3 ou version ultérieure) |
public | Toutes les classes, accessibles à partir de différents modules, pas Overide |
internal | Accessible depuis le même module |
(Aucun modificateur) | Même contrôle d'accès que "interne" |
fileprivate | Accessible depuis le même fichier(Swift3 ou version ultérieure) |
private | Uniquement accessible depuis le même fichier |
Premièrement, les deux sont des langages à typage statique. Le type est déterminé avant la compilation, et il est évident que Java etc. sont explicitement spécifiés au moment de la déclaration de variable, mais même dans le cas d'une notation telle que "var hoge1 = hoge2" au moment de la déclaration de variable comme Swift. , Le type de la variable est déterminé au moment de la déclaration par inférence de type.
Java
Spécifiez "Nom du type Nom de la variable = Valeur initiale;".
python
String hoge = "";
La valeur initiale n'est pas requise au moment de la déclaration, et il est possible de déclarer "nom de la variable de type;", mais si la valeur n'est pas définie lors de l'accès réel à la variable, une erreur de compilation se produira. De plus, si la valeur est indéfinie, vous pouvez spécifier null, mais si vous essayez d'accéder à une variable qui est nulle, vous obtiendrez une exception NullpointerException.
Spécifiez "nom de la variable de nom de type final = valeur initiale;". Comme avec la déclaration de constante de Swift, la valeur ne peut pas être réinitialisée une fois la valeur initiale définie.
python
final String hoge = "";
Notez que Java est un langage entièrement orienté objet, donc les variables et les constantes sont toujours associées à une classe ou une instance, et les variables et les constantes ne peuvent pas être définies en dehors de la classe. À ce stade, lorsque vous définissez une constante associée à une classe, déclarez-la comme une constante statique (constante), appelez-la une constante de classe et spécifiez "nom de la variable de nom de type final statique = valeur initiale;" .. Les constantes de classe sont définies par les conventions de dénomination Java qui sont déclarées en caractères alphanumériques supérieurs et inférieurs.
Swift
Spécifiez "nom de la variable var: nom du type = valeur initiale". En outre, Swift a une spécification de langage appelée Type facultatif, et nil ne peut pas être défini pour les variables qui ne sont pas de types facultatifs.
python
var hoge:String = ""
Correspond au type facultatif Java8 et au type facultatif Kotlin. Le type facultatif est une variable qui peut contenir l'état nul en plus de la valeur normale du type de variable. La valeur initiale de Type facultatif est définie sur nil. Contrairement à Java, Swift garantit au niveau de la notation que les variables qui ne sont pas de type facultatif ne sont pas toujours nulles (nulles). Le type facultatif peut être spécifié explicitement ou automatiquement déroulé lorsqu'une variable est utilisée.
Spécifiez "?" Après le nom du type, par exemple "var nom de la variable: nom du type? = Valeur initiale".
python
var hoge:String? = ""
Si vous spécifiez un type facultatif explicite, la variable ne peut pas être utilisée de la même manière que le type d'origine et doit être déballée lorsqu'elle est utilisée. Si vous essayez de manipuler un type facultatif explicite sans le déballer, vous obtiendrez une erreur de compilation.
python
var hoge:String? = "ABC" //Déclarer une variable avec un type facultatif explicite
print(hoge.lowercased()) //Erreur de compilation
Développer un type facultatif signifie rendre les variables du type facultatif disponibles de la même manière que le type d'origine. Il y a plusieurs façons de déballer, certaines devraient être utilisées lorsqu'il n'y a aucune possibilité de zéro par programme, et d'autres devraient être utilisées quand il y a une possibilité de zéro par programme.
Après avoir spécifié "!" Après le nom du type, tel que "Nom de la variable!. Opération", décrivez l'opération comme les propriétés et les méthodes.
python
var hoge:String? = "ABC" //Déclarer une variable avec un type facultatif explicite
print(hoge!.lowercased()) //"Abc" est sorti
Cependant, si la variable que vous essayez de déballer est nulle, vous obtiendrez une erreur d'exécution au moment de l'exécution.
python
hoge = nil //Le type facultatif peut être défini sur nil
print(hoge!.lowercased()) //Une erreur d'exécution se produit
Par conséquent, il est efficace lors de l'écriture des programmes suivants.
python
var hoge:String?
if Date().timeIntervalSince1970 > 0 {
hoge = "abc"
} else {
hoge = "cde"
}
print(hoge!.lowercased())
Après avoir spécifié "?" Après le nom du type, tel que "nom de variable?. Opération", décrivez l'opération comme les propriétés et les méthodes. Contrairement au cas du déballage forcé avec "Nom de variable!. Opération", nil est renvoyé.
python
var hoge:String? = nil //Le type facultatif peut être défini sur nil
print(hoge?.lowercased()) //Aucune erreur d'exécution, nil est émis
Spécifiez "!" Après le nom du type, par exemple "var nom de la variable: nom du type! = Valeur initiale".
python
var hoge:String! = ""
Si vous spécifiez un type facultatif implicite, vous n'avez pas besoin de le dérouler explicitement dans votre code lorsque vous utilisez une variable, il sera automatiquement déroulé lorsque vous l'utiliserez.
python
var hoge:String! = "ABC" //Déclarer une variable avec un type facultatif implicite
print(hoge.lowercased()) //Peut être utilisé sans déballer explicitement. "Abc" est sorti
Par conséquent, lorsque vous utilisez une variable, vous pouvez essentiellement utiliser le type d'origine sans considérer qu'il est nul, mais si vous essayez d'utiliser une variable de type facultatif avec un ensemble nul, le runtime Une erreur se produira.
python
var hoge:String! = "ABC" //Déclarer une variable avec un type facultatif implicite
hoge = nil //Le type facultatif peut être défini sur nil
print(hoge.lowercased()) //Une erreur d'exécution se produit
Dans le cas d'un type facultatif implicite, il est nécessaire de l'implémenter pour qu'il soit garanti qu'il n'est pas assez nul lors de l'utilisation suffisante de la variable.
Spécifiez "let nom de la variable: nom du type = valeur initiale;". Comme pour les déclarations de constantes Java, vous ne pouvez pas réinitialiser la valeur après avoir défini la valeur initiale.
python
let hoge:String = ""
Notez que contrairement à Java, Swift n'est pas un langage orienté objet (Swift est un langage orienté protocole), il n'est donc pas toujours nécessaire de l'associer à une classe ou une instance, et il est possible de définir des constantes directement dans le fichier. Je peux le faire. Pour les constantes définies directement dans le fichier, il est garanti quasiment statiquement immuable.
Recommended Posts