[Swift](https://ja.wikipedia.org/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3 % 83% B3% E3% 82% B0% E8% A8% 80% E8% AA% 9E)), Scala, [Kotlin](https :: //ja.wikipedia.org/wiki/Kotlin), [Go](https://ja.wikipedia.org/wiki/Go_(%E3%83%97%E3%83%AD%E3%82%B0 % E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0% E8% A8% 80% E8% AA% 9E )), [Rust](https: // ja. wikipedia.org/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 Diejenigen, die sich mit% E8% A8% 80% E8% AA% 9E)) entwickeln, sind mit der sogenannten "Typinferenz" vertraut. Typinferenz ist eine Sprachfunktion in statisch typisierten Sprachen, und der Compiler ermittelt den Typ automatisch, ohne den Typ explizit zu beschreiben, so wie Kotlins Typinferenz.
var a = 1
Durch einfaches Schreiben schließt der Compiler automatisch aus dem Typ auf der rechten Seite, dass die Variable a auf der linken Seite ein ganzzahliger Typ ist. Selbst in Java war die Tatsache, dass "Typinferenz lokaler Variablen" von Java 10 abgeleitet wurde, ein neues Ereignis in meinem Gedächtnis.
Vor Java 10 war es beispielsweise erforderlich, den Variablentyp wie folgt explizit zu schreiben:
String name = "tamito0201";
In Java 10 können Sie die erforderlichen expliziten Typen in lokalen Variablendeklarationen entfernen, indem Sie das Schlüsselwort var wie folgt hinzufügen:
var name = "tamito0201";
In dem oben genannten Fall haben Sie möglicherweise keinen großen Vorteil, da String nur durch var ersetzt wird. Im Fall von Java müssen Sie jedoch bei Verwendung der Erfassungs-API mühsam redundanten Code schreiben.
HashMap<Integer, String> map = new HashMap<Integer, String>();
In Java 10 oder höher ist dies
var map = new HashMap<Integer, String>();
Es kann beschrieben werden als. Wie elegant es ist!
Obwohl Typinferenz praktisch ist, handelt es sich auch um ein zweischneidiges Schwert, das unerwartete Fehler verursacht. Daher gibt es je nach Projekt einige Projekte, die die Angabe von var durch den Codierungsstandard verbieten und den Typ explizit angeben. Je größer das Projekt ist, desto altmodischer ist die explizite Eingabe, da das Risiko unerwarteter Fehler besteht.
Warum? Angenommen, Sie haben den folgenden Code:
var distance = getDistance();
System.out.println(distance * 100);
Was ist der Rückgabewert der Funktion getDistance? Diejenigen, die ein ausgeprägtes Gefühl haben, haben es vielleicht hier bemerkt. Korrekt. Wenn die Möglichkeit besteht, das Wrapper-Objekt Integer zurückzugeben, kann null zurückgegeben werden. Infolgedessen ist es offensichtlich, dass nullpo bei der nächsten "Entfernung * 100" auftritt, daher müssen Sie null überprüfen.
Integer distance = getDistance();
if (distance != null) {
System.out.println(distance * 100);
}
In Java 8 oder höher sollten Sie Optional zurückgeben.
Optional<Integer> distance = Optional.ofNullable(getDistance());
distance.ifPresent(d -> System.out.println(d * 100));
Mit anderen Worten, da var vom Projekt oder Team ordnungsgemäß verwendet wird, muss die Codierungsrichtlinie festgelegt werden.
--Verwenden Sie nicht var
Alle sind korrekt, aber in Wirklichkeit wird 1 oder 2 als angemessen angesehen. Unabhängig davon, wie oft Sie den im Codierungsstandard angegebenen Typ angeben, ist es unwahrscheinlich, dass alle Ingenieure den Codierungsstandard in einem Großprojekt einhalten. Bestimmt durch den Codierungsstandard Checkstyle, SpotBugs, [PMD](https: // pmd) Ich denke, es ist besser, es mit .github.io /) usw. zu verknüpfen.
Alles hat seine Vor- und Nachteile.
Stellen Sie sicher, dass Sie entscheiden, was mit diesem Bereich in Ihrem Projekt geschehen soll. Wenn Sie sich nicht entscheiden, ist das Chaos die Quelle des abgeschlossenen Projekts.
Recommended Posts