Ich möchte so etwas hauptsächlich aus der Sicht eines Java-Ingenieurs (Java oder Swift) tun. Kann ich das nicht tun? Es werden die Tipps sein, die Sie zu diesem Zeitpunkt verwenden sollten.
Java 8 wurde angekündigt und Kotlin wurde offiziell in Android Studio 3.0 übernommen. Wenn jedoch ein Ingenieur, der nur Java ausführt, iOS-Apps mit Xcode entwickelt oder ein Ingenieur, der iOS-Apps mit Swift entwickelt, Java ist Wir hoffen, es hilft, wenn Sie bei der Entwicklung von Android die Sprachnotationsebene überprüfen möchten.
Diese Seite befasst sich hauptsächlich mit der Java / Swift-Notation von "Quellcodeverwaltung", "Gültigkeitsbereich" und "Variable". Dieser Artikel basiert auf 1.7 für Java und Swift3 für Swift, wir entschuldigen uns jedoch für etwaige Notationsfehler.
--Vergleich zwischen Java und Swift (1) Quellcodeverwaltung / Umfang / Variablen
Java Es wird von Paketen verwaltet, und Pakete werden (im Allgemeinen) in einer Verzeichnishierarchie festgelegt. Sogar Klassen im selben Projekt können als separate Klassen in Test.class im Paket aaa.bbb.ccc und Test.class im Paket aaa.bbb.xxx behandelt und erstellt werden.
Wenn Sie jedoch verschiedene Paketklassen im selben Projekt verwenden möchten, müssen Sie am Anfang der Quelldatei "Importimportziel" deklarieren oder mit dem vollständigen Modifikator darauf zugreifen. Das Paket java.lang enthält jedoch häufig verwendete Klassen, und die darin enthaltenen Klassen (String, Integer usw.) können verwendet werden, ohne explizit importiert zu werden.
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<>();
}
}
Die Quelldatei muss die Erweiterung "* .java" haben. Außerdem kann die Java-Quelldatei nur eine öffentliche Klasse enthalten, und der Name der Java-Quelldatei und der Name der öffentlichen Klasse müssen übereinstimmen.
Swift In Swift wird das Paket für jedes Modul (Projekt) bestimmt, und der Modulname wird als Namespace bestimmt. Wenn Sie sich im selben Modul befinden, können Sie daher unabhängig von der Verzeichnishierarchie oder der Quelle nur über den Klassennamen darauf zugreifen. Sie müssen jedoch bei Klassennamenkonflikten vorsichtig sein. Wenn Sie zu diesem Zeitpunkt eine Klasse eines anderen Moduls (z. B. ein Bibliotheksprojekt) verwenden, müssen Sie am Anfang der Quelldatei "import import target package" deklarieren oder mit einem vollständigen Modifikator wie "target package.class name" darauf zugreifen. es gibt.
python
import Foundation
class Main {
var arr:Array = Array<String>()
var date:Foundation.Date = Foundation.Date()
}
Die Quelldatei muss die Erweiterung "* .swift" haben. Im Gegensatz zu Java können Swift-Quelldateien auch einen beliebigen Dateinamen erhalten. Darüber hinaus können unabhängig vom Gültigkeitsbereich mehrere Klassen für einen Dateinamen definiert werden.
Java In Java wird die Zugriffssteuerung grundsätzlich für jedes Paket und jede Klasse festgelegt.
Zugriffsmodifikator | Erläuterung |
---|---|
public | Zugriff von allen Klassen und Paketen |
protected | Zugriff innerhalb desselben Pakets und über Unterklassen |
(Kein Modifikator) | Kann von demselben Paket aus aufgerufen werden |
private | Nur innerhalb derselben Klasse zugänglich |
Swift In Swift wird die Zugriffssteuerung grundsätzlich für jedes Modul und jede Datei festgelegt.
Zugriffsmodifikator | Erläuterung |
---|---|
open | Alle Klassen, zugänglich von verschiedenen Modulen(Swift3 oder höher) |
public | Alle Klassen, auf die von verschiedenen Modulen aus zugegriffen werden kann, nicht Overide |
internal | Kann über dasselbe Modul aufgerufen werden |
(Kein Modifikator) | Gleiche Zugangskontrolle wie "intern" |
fileprivate | Kann aus derselben Datei heraus aufgerufen werden(Swift3 oder höher) |
private | Nur innerhalb derselben Datei zugänglich |
Erstens sind beide statisch typisierte Sprachen. Der Typ wird vor der Kompilierungszeit festgelegt, und es ist offensichtlich, dass Java usw. zum Zeitpunkt der Variablendeklaration explizit angegeben wird, aber auch bei Notationen wie "var hoge1 = hoge2" zum Zeitpunkt der Variablendeklaration wie Swift. , Der Typ der Variablen wird zum Zeitpunkt der Deklaration durch Typinferenz bestimmt.
Java
Geben Sie "Typname Variablenname = Anfangswert;" an.
python
String hoge = "";
Der Anfangswert ist zum Zeitpunkt der Deklaration nicht erforderlich, und es ist möglich, "Typname Variablenname;" zu deklarieren. Wenn der Wert jedoch beim tatsächlichen Zugriff auf die Variable nicht festgelegt wird, tritt ein Kompilierungsfehler auf. Wenn der Wert unbestimmt ist, können Sie auch null angeben. Wenn Sie jedoch versuchen, auf eine Variable zuzugreifen, die null ist, wird eine NullpointerException-Ausnahme angezeigt.
Geben Sie "endgültiger Typname Variablenname = Anfangswert;" an. Wie bei der konstanten Deklaration von Swift kann der Wert nicht zurückgesetzt werden, nachdem der Anfangswert festgelegt wurde.
python
final String hoge = "";
Beachten Sie, dass Java eine vollständig objektorientierte Sprache ist, sodass Variablen und Konstanten immer einer Klasse oder Instanz zugeordnet sind und Variablen und Konstanten nicht außerhalb der Klasse definiert werden können. Wenn Sie zu diesem Zeitpunkt eine einer Klasse zugeordnete Konstante definieren, deklarieren Sie sie als statisches Finale (Konstante), nennen Sie dies eine Klassenkonstante und geben Sie "statischer Endtypname Variablenname = Anfangswert" an. .. Klassenkonstanten werden durch Java-Namenskonventionen definiert, die in oberen und unteren alphanumerischen Zeichen deklariert sind.
Swift
Geben Sie "var Variablenname: Typname = Anfangswert" an. Darüber hinaus verfügt Swift über eine Sprachspezifikation namens Optional Type, und für Variablen, die keine optionalen Typen sind, kann nil nicht festgelegt werden.
python
var hoge:String = ""
Entspricht dem optionalen Java8-Typ und dem optionalen Kotlin. Optionaler Typ ist eine Variable, die zusätzlich zum Normalwert des Variablentyps den Null-Status halten kann. Der Anfangswert von Optional Type wird auf Null gesetzt. Im Gegensatz zu Java garantiert Swift auf Notationsebene, dass Variablen, die nicht vom optionalen Typ sind, nicht immer null (null) sind. Der optionale Typ kann explizit angegeben oder automatisch entpackt werden, wenn eine Variable verwendet wird.
Geben Sie nach dem Typnamen "?" An, z. B. "var Variablenname: Typname? = Anfangswert".
python
var hoge:String? = ""
Wenn Sie einen expliziten optionalen Typ angeben, kann die Variable nicht auf die gleiche Weise wie der ursprüngliche Typ verwendet werden und muss bei Verwendung entpackt werden. Wenn Sie versuchen, einen expliziten optionalen Typ zu bearbeiten, ohne ihn zu entpacken, wird ein Kompilierungsfehler angezeigt.
python
var hoge:String? = "ABC" //Deklarieren Sie eine Variable mit einem expliziten optionalen Typ
print(hoge.lowercased()) //Kompilierungsfehler
Das Auspacken eines optionalen Typs bedeutet, dass die Variablen des optionalen Typs auf dieselbe Weise wie der ursprüngliche Typ verfügbar gemacht werden. Es gibt verschiedene Möglichkeiten zum Auspacken. Einige sollten verwendet werden, wenn programmatisch keine Null möglich ist, und andere sollten verwendet werden, wenn programmatisch keine Null möglich ist.
Nach Angabe von "!" Beschreiben Sie nach dem Typnamen, z. B. "Variablenname !. Operation", die Operation, z. B. Eigenschaften und Methoden.
python
var hoge:String? = "ABC" //Deklarieren Sie eine Variable mit einem expliziten optionalen Typ
print(hoge!.lowercased()) //"Abc" wird ausgegeben
Wenn die Variable, die Sie entpacken möchten, jedoch Null ist, wird zur Laufzeit ein Laufzeitfehler angezeigt.
python
hoge = nil //Der optionale Typ kann auf Null gesetzt werden
print(hoge!.lowercased()) //Laufzeitfehler tritt auf
Daher ist es beim Schreiben der folgenden Programme effektiv.
python
var hoge:String?
if Date().timeIntervalSince1970 > 0 {
hoge = "abc"
} else {
hoge = "cde"
}
print(hoge!.lowercased())
Nach der Angabe von "?" Beschreiben Sie nach dem Typnamen, z. B. "Variablenname ?. Operation", die Operation, z. B. Eigenschaften und Methoden. Im Gegensatz zum Fall des gewaltsamen Auspackens mit "Variablenname !. Operation" wird nil zurückgegeben.
python
var hoge:String? = nil //Der optionale Typ kann auf Null gesetzt werden
print(hoge?.lowercased()) //Kein Laufzeitfehler, es wird null ausgegeben
Geben Sie "!" Nach dem Typnamen an, z. B. "var Variablenname: Typname! = Anfangswert".
python
var hoge:String! = ""
Wenn Sie einen impliziten optionalen Typ angeben, müssen Sie ihn bei Verwendung einer Variablen nicht explizit in Ihren Code packen. Bei Verwendung wird er automatisch entpackt.
python
var hoge:String! = "ABC" //Deklarieren Sie eine Variable mit einem impliziten optionalen Typ
print(hoge.lowercased()) //Kann ohne explizites Auspacken verwendet werden. "Abc" wird ausgegeben
Wenn Sie eine Variable verwenden, können Sie daher grundsätzlich den ursprünglichen Typ verwenden, ohne zu berücksichtigen, dass er Null ist. Wenn Sie jedoch versuchen, eine Variable des optionalen Typs mit Null zu betreiben, wird die Laufzeit verwendet Ein Fehler wird auftreten.
python
var hoge:String! = "ABC" //Deklarieren Sie eine Variable mit einem impliziten optionalen Typ
hoge = nil //Der optionale Typ kann auf Null gesetzt werden
print(hoge.lowercased()) //Laufzeitfehler tritt auf
Im Fall eines impliziten optionalen Typs muss dieser implementiert werden, damit garantiert wird, dass er bei ausreichender Verwendung der Variablen nicht null genug ist.
Geben Sie "Variablenname zulassen: Typname = Anfangswert;" an. Wie bei Java-Konstantendeklarationen können Sie den Wert nach dem Festlegen des Anfangswertes nicht zurücksetzen.
python
let hoge:String = ""
Beachten Sie, dass Swift im Gegensatz zu Java keine objektorientierte Sprache ist (Swift ist eine protokollorientierte Sprache). Daher ist es nicht immer erforderlich, sie einer Klasse oder Instanz zuzuordnen, und es ist möglich, Konstanten direkt in der Datei zu definieren. Ich kann es schaffen Für Konstanten, die direkt in der Datei definiert sind, ist garantiert, dass sie praktisch statisch unveränderlich sind.