[JAVA] Warum Kotlin so bequem ist

Hintergrund dieses Beitrags

https://qiita.com/ngsmvn/items/b74328291d0b5342e407

Für diejenigen, die zu lang sind und nicht lesen möchten, enthält jeder Abschnitt eine Zusammenfassung, sodass Sie den Zweck für sich verstehen können.

Warum Kotlin so bequem ist

Kurz gesagt, warum Kotlin so nützlich ist, ist **, weil es gut zu anderen Sprachen passt **.

Ein vom Kotlin-Entwickler geschriebenes Buch namens Kotlin in Action sagt:

We aren’t trying to advance the state of the art in programming language design and explore innovative ideas in computer science. Instead, whenever possible, we’re relying on features and solutions that have already appeared in other programming languages and have proven to be successful.

(Meine Übersetzung)

Wir versuchen nicht, die Messlatte für Programmiersprachen höher zu legen oder innovative Ideen in der Informatik zu erforschen. Stattdessen verlassen wir uns so weit wie möglich auf Funktionen und Lösungen, die bereits in anderen Programmiersprachen verfügbar sind und von denen wir wissen, dass sie funktionieren werden.

Sie können sehen, dass es praktisch ist und aktiv versucht, die guten Punkte bestehender Programmiersprachen zu integrieren.

Spezifische nützliche Punkte

Ich denke, es gibt viele andere Dinge, aber ich werde mich auf die folgenden drei Punkte konzentrieren.

  1. "Flexibel" und "prägnant" trotz statischer Typisierung
  2. "Referenztransparenz" aus einer funktionalen Sprache
  3. "einmal schreiben, überall ausführen", da es auf der JVM funktioniert (später beschrieben)

"Prägnanz" und "Flexibilität" dynamisch typisierter Sprachen

Zusammenfassung dieses Abschnitts: Statisch typisierte Sprachen geben Ihrem Computer viele Informationen zu Ihrem Programm, sodass Sie Programmfehler schnell erkennen können. Es ist ärgerlich, stattdessen zu schreiben. Kotlin ist eine statisch typisierte Sprache, die einfach und flexibel zu schreiben ist

Haben Sie jemals einen Tippfehler gehabt, als Sie dachten, ein in JavaScript oder PHP geschriebenes Programm würde nicht funktionieren? Einfache Fehler wären einfacher, wenn Ihr Computer sie finden könnte.

Eine statisch typisierte Sprache ist eine Sprache, die vor der Ausführung Fehler wie Rechtschreibfehler und verschiedene Datentypen findet. Umgekehrt werden JavaScript und PHP als dynamisch typisierte Sprachen bezeichnet. Die beiden unterscheiden sich darin, wann der Typ (Datentyp) bestimmt wird.

--Dynamisch → Bestimmt, wann das Programm ausgeführt wird --Dateninkonsistenzen können vor der Ausführung nicht gefunden werden --Static → Wird vor dem Ausführen des Programms festgelegt --Dateninkonsistenzen können vor der Ausführung gefunden werden

Wenn Sie einen Fehler finden, sollten Sie immer eine statisch typisierte Sprache verwenden, oder? Aber das ist nicht der Fall. Vergleichen wir die Programme, die Zeichenfolgen ausgeben.

alert("JavaScript");

--PHP (dynamische Eingabe)

echo "PHP";
public class Main {
    public static void main(String[] args){
        System.out.println("Java");
    }
}

Sie müssen nur so viel schreiben, obwohl Sie nur die Zeichenfolge anzeigen möchten. Jede statisch typisierte Sprache und dynamisch typisierte Sprache hat ihre Vor- und Nachteile.

コメント 2019-12-03 154004.png

Es wäre großartig, wenn es eine statisch typisierte Sprache gäbe, die präzise und flexibel geschrieben werden könnte. Das heißt, Kotlin ist der Stärkste.

fun main() = println("Kotlin") //Obwohl es statisch typisiert ist, kann es präzise geschrieben werden!!

Durch das Lernen aus den Fehlern anderer Programmiersprachen und das Erlernen der guten Punkte kann ich so präzise schreiben wie vorhandene dynamisch typisierte Sprachen.

Kotlin hat viele Funktionen, um präzise und flexibel zu schreiben. ** Ich kann euch nicht alle zeigen, also bitte googeln **

Qiita hat einen guten Artikel. (Werfen)

"Referenztransparenz" funktionaler Sprachen

Zusammenfassung dieses Abschnitts: Wenn sich verschiedene Werte ändern, fällt es schwer, mehr darüber nachzudenken. Kotlin, das die funktionale Sprache und ihren Mechanismus imitiert, kann so geschrieben werden, dass der Wert nicht umgeschrieben werden kann.

Referenztransparenz ist die Eigenschaft, dass das Ergebnis der Ausführung der Funktion dasselbe ist, wenn die Eingabe identisch ist. Haben Sie es für selbstverständlich gehalten? Betrachten Sie nun das folgende Beispiel.

Angenommen, Sie legen eine 1000-Yen-Rechnung in einen Automaten und drücken die 100-Yen-Kaffeetaste. Sind die Produkte und Änderungen, die herauskommen, immer gleich? 自販機

Wenn es ausverkauft ist, kommt kein Kaffee heraus und die Änderung beträgt 500 Yen und 100 Yen oder alle 100 Yen. Wenn Sie dieses Beispiel durch ein Programm ersetzen

Was ich in diesem Beispiel vermitteln wollte, ist, dass ** wenn sich der Status ändert, sich die Ausgabe ändert **. Es ist ärgerlich zu programmieren, während man über jeden Zustand nachdenkt. Erstens, wenn sich der Zustand nicht ändert, besteht kein Grund, darüber nachzudenken.

In einer rein funktionalen Sprache wird Referenztransparenz erreicht, indem der Status des Objekts nicht neu geschrieben wird.

Zum Beispiel kann Haskell dies nicht tun. (Es ist ein Pseudocode, also kein richtiger Haskell.)

--Liste der verfügbaren Programmiersprachen
let skillSet = ["JavaScript", "PHP"]
--Da ich an der Lernsitzung teilgenommen habe, kann ich Kotlin verwenden.
skillSet push "Kotlin" --← Kann nicht zur Liste hinzugefügt werden
for (let i = 0; i < skillSet size; i++){ --← Die Schleifenvariable kann nicht um 1 erhöht werden
    --Stolz auf brauchbare Programmiersprachen
    putStrLn skillSet !! i ++ "Kann verwendet werden!!"
}
--Ich habe den Code eine Weile nicht geschrieben, also habe ich alles vergessen
skillSet = [] --← Kann nicht neu zugewiesen werden. Oder besser gesagt, es heißt Bindung statt Substitution
--

Kotlin übernimmt diese Idee teilweise, um zwischen wiederbeschreibbaren Objekten (veränderlichen Objekten) und nicht wiederbeschreibbaren Objekten (unveränderlichen Objekten) zu unterscheiden.

--Bewegung

//Liste der verfügbaren Programmiersprachen
var skillSet = mutableListOf("JavaScript", "PHP") //Weisen Sie einer Variablen, die neu zugewiesen werden kann, eine veränderbare Liste zu
//Da ich an der Lernsitzung teilgenommen habe, kann ich Kotlin verwenden.
skillSet.add("Kotlin")
for (i in 0 until skillSet.size){
    //Stolz auf brauchbare Programmiersprachen
    println("${skillSet[i]}Kann verwendet werden")
}
//Ich habe den Code eine Weile nicht geschrieben, also habe ich alles vergessen
skillSet = mutableListOf()
//Liste der verfügbaren Programmiersprachen
val skillSet = listOf("JavaScript", "PHP") //Weisen Sie einer Variablen, die nicht neu zugewiesen werden kann, eine unveränderliche Liste zu
//Da ich an der Lernsitzung teilgenommen habe, kann ich Kotlin verwenden.
skillSet.add("Kotlin") //← Dies ist nicht möglich
for (i in 0 until skillSet.size){
    //Stolz auf brauchbare Programmiersprachen
    println("${skillSet[i]}Kann verwendet werden")
}
//Ich habe den Code eine Weile nicht geschrieben, also habe ich alles vergessen
skillSet = listOf() //← Das kann ich auch nicht

Neben der Referenztransparenz scheinen funktionale Sprachen durch Funktionen und Operationen höherer Ordnung in Listen beeinflusst zu werden.

Java "einmal schreiben, überall ausführen (einmal schreiben, überall ausführen)"

Zusammenfassung dieses Abschnitts: Java kann auf jedem Betriebssystem ausgeführt werden, ebenso wie Kotlin, das die Funktionsweise von Java nachahmt.

Compilersprache und Interpretersprache

Kotlin ist stark von der Sprache Java beeinflusst. Um zu erklären, warum Kotlin so großartig ist, müssen wir erklären, warum Java so großartig ist. Ich werde einen kleinen Umweg machen, aber am Ende wird es zu Kotlins Geschichte führen, also folge mir bitte.

Es gibt zwei Haupttypen von Programmiersprachen. Eine Compilersprache und eine Interpretersprache.

Ich erinnere mich nicht, wo ich die Metapher gehört habe, aber es ist, als würde ich einen Brief an einen Computer schreiben.

"Bitte zeigen Sie mir die Webseite" "Bitte zeigen Sie mir den Wert der Datenbank" "Bitte senden Sie eine E-Mail an diese Person" Ich glaube, es gibt verschiedene Anfragen, aber ich werde die Anfrage in einem Brief schreiben und an den Computer senden. Der Buchstabe ist das Programm, und die Sprache, in der das Programm geschrieben wird, ist die Programmiersprache.

Der Computer kennt die Programmiersprache nicht. Der Computer kennt nur das aktuelle EIN / AUS. Ein computerlesbares Wort, das EIN / AUS mit den Nummern 0 und 1 darstellt, wird als Maschinensprache bezeichnet.

Es gibt zwei Möglichkeiten, einen Computer zum Lesen eines Briefes zu bewegen (= ein Programm ausführen).

  1. Übersetzen Sie alle Briefe vor dem Senden in die Maschinensprache
  2. Erklären Sie neben dem Computerlesen die Bedeutung Zeile für Zeile

Ersteres ist die Compilersprache und letzteres ist die Interpretersprache.

Die Compilersprache hat Vorteile wie eine schnelle Ausführungsgeschwindigkeit und weniger Bedenken, dass Buchstaben von anderen Personen nachgeahmt werden (weil Menschen die Maschinensprache nicht verstehen), aber es gibt einige Probleme.

Ihr Brief hängt vom Betriebssystem ab

In Compilersprachen vor Java waren Programme vom Betriebssystem abhängig. Die Abhängigkeit vom Betriebssystem bedeutet, dass jedes Betriebssystem entwickelt und getestet werden musste. Wofür ist das Betriebssystem überhaupt?

Der Computer muss (natürlich) seine eigene Hardware verwenden, um die Arbeit zu erledigen. Angenommen, Sie müssen ein detailliertes Programm über Hardware schreiben, z. B. "An diesem Speicherort auf der Festplatte gespeicherte Dateien anzeigen". Was ist, wenn Sie einen neuen Computer kaufen oder Ihr Programm auf dem Computer eines Freundes ausführen möchten?

Natürlich sind das Computerdesign und die Teile unterschiedlich, daher muss ich das Programm neu schreiben. Es ist nervig, nicht wahr?

Das Betriebssystem sorgt dafür, dass auf die Hardware des Computers zugegriffen wird, damit der Programmierer sie nicht direkt berühren muss. Dank des Betriebssystems muss nicht direkt auf die Hardware programmiert werden.

Der Kontaktpunkt, an dem die Software "OS-Kun, bitte greifen Sie mit einem guten Gefühl auf die Hardware zu" fragt, wird als API bezeichnet. Da die API für jedes Betriebssystem unterschiedlich ist, ändert sich das Programm, wenn das Betriebssystem unterschiedlich ist. Es ist einfacher als der direkte Zugriff auf die Hardware, aber es ist immer noch ärgerlich, mit Unterschieden zwischen Betriebssystemen umzugehen.

Die Java Virtual Machine (JVM) hat dieses Problem behoben.

JVM

Eine JVM ist eine virtuelle Java-Maschine. Eine virtuelle Maschine, die als Java-Ausführungsumgebung ausgeführt wird. Eine virtuelle Maschine ist eine Software, die vorgibt, ein Computer zu sein, der die Hardware eines realen Computers verwendet. Es gibt viele andere Typen als JVM.

Die JVM bietet APIs für Java-Programme. Diese API ist absichtlich auf die Funktionen beschränkt, die verschiedenen Betriebssystemen gemeinsam sind.

In Analogie zum obigen Brief ersetzt das Schreiben eines Briefes in Java die Maschinensprache durch eine Zwischensprache, die die JVM versteht. Es wird in eine Maschinensprache übersetzt, die je nach Betriebssystem, auf dem die JVM installiert ist, ein gutes Gefühl vermittelt.

Anstatt die Hardware direkt zu berühren, konnte die Software den Unterschied in der Hardware durch das Betriebssystem ausgleichen. Auf die gleiche Weise können Sie den Unterschied zwischen Betriebssystemen ausgleichen, indem Sie die JVM durchlaufen, anstatt direkt auf das Betriebssystem zuzugreifen.

Dies ist "einmal schreiben, überall ausführen", das von Sun Microsystems, dem Erfinder von Java, befürwortet wird. Nach dem Schreiben können Sie das Programm verwenden, ohne sich der Unterschiede im Betriebssystem bewusst sein zu müssen. Das ist nicht mehr ärgerlich ... es war nicht mehr.

Java als Ausführungsumgebung ist ausgezeichnet, aber Java als Programmiersprache hat eine lange Syntax und ist sehr ärgerlich.

Ein Unternehmen in der Tschechischen Republik, das sich über "Kann ich eine IDE wie diese erstellen?" Ekelte, hat eine moderne Programmiersprache erstellt, die auf JVM ausgeführt wird. Das ist Kotlin. Das ist das Gute an der JVM, die erkennt, dass "einmal schreiben, überall laufen".


Das war's! Ich habe in meinen eigenen Worten zusammengefasst, warum Kotlin so nützlich ist.

Referenzmaterial

Kotlin In Action [Warum mit Java machen](https://www.amazon.co.jp/Java%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81% 8F% E3% 82% 8B% E3% 81% AE% E3% 81% 8B-% E7% 9F% A5% E3% 81% A3% E3% 81% A6% E3% 81% 8A% E3% 81% 8D % E3% 81% 9F% E3% 81% 84Java% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3 % 82% B0% E3% 81% AE% E5% 9F% BA% E7% A4% 8E% E7% 9F% A5% E8% AD% 98% E7% B1% B3% E6% 8C% 81% E5 % B9% B8% E5% AF% BF / dp / 4822281965)

Recommended Posts

Warum Kotlin so bequem ist
Warum PreventDefault benötigt wird
Teilen Sie durch Ruby! Warum ist es 0?
Warum Java Vector nicht verwendet wird