Vergleich zwischen Java und Swift (1) Quellcodeverwaltung / Umfang / Variablen

Einführung

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

Quellcodeverwaltung

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<>();
	}
}

Quelldatei

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()
}

Quelldatei

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.

Umfang

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

Variable

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

Methode zur Variablendeklaration

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.

Konstante Deklarationsmethode

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

Methode zur Variablendeklaration

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 = ""

Was ist ein optionaler Typ?

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.

Expliziter optionaler Typ

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
Optionaler Typ Auspacken

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.

Wenn es keine Möglichkeit von Null gibt

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())
Wenn es eine Möglichkeit von Null gibt

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

Impliziter optionaler Typ

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.

Konstante Deklarationsmethode

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.

Recommended Posts

Vergleich zwischen Java und Swift (1) Quellcodeverwaltung / Umfang / Variablen
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
[Java] Vergleich von Zeichenketten und && und ||
Vergleich zwischen Java und Swift (2) Grundtyp / Arithmetik / Steuerungssyntax / Funktionsdefinition
Java- und Swift-Vergleich (3) Klassenimplementierung / Klassenvererbung / Klassendesign
[Java] Variablen- und Typtypen
Java-Programmierung (Variablen und Daten)
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Gleiches Urteil / gleichwertiges Urteil / Vergleich / Reihenfolge in Swift und Java
Java Primer Series (Variationen und Typen)
[Grundkenntnisse in Java] Umfang der Variablen
Java für Anfänger, Variablen und Typen
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Ein Java-Ingenieur verglich Swift, Kotlin und Java.
[Java] Vergleich von Sammlungs- und StringBuilder-Operationsmethoden
Java-Programmierung (statische Klausel und "Klassenvariablen")
Vergleich von Alibabas Open Source Sentinel Java Flow Control-Projekt und Hystrix
[Swift vs Java] Lassen Sie uns statisch und endgültig verstehen
Java-Steuerungssyntax
[Java] Ausgabe, Variablen
Java-Steuerungssyntax
Java-Variablenbereich (Bereich)
[WIP] Java-Variablen
Über Variablen und Umfang (Ruby)
[Java] Kartenvergleich
Java Framework Vergleich
Java-Variablenbereich
Java und JavaScript
XXE und Java
Java-Sitzungsumfang
Der Vergleich von enum ist == und gleich ist gut [Java]
[Java] Unterschied zwischen statischem final und final in Mitgliedsvariablen
[Java] Verweisen Sie auf und setzen Sie private Variablen mit Reflektion
Java-Variablenbereich (Bereich, in dem Variablen angezeigt werden)
[Einführung in Java] Variablenbereich (Bereich, lokale Variable, Instanzvariable, statische Variable)
Äquivalenter Vergleich von Java-Wrapper-Klasse und primitivem Typ
[Java Silver] Was sind Klassenvariablen, Instanzvariablen und lokale Variablen?