Java-Ingenieure vergleichen nun, um die grundlegende Grammatik von Ruby Teil 2 (Klassen, Methoden) zu lernen.

Einführung

Das zweite Mal ist eine Klasse oder Methode.

Umgebung

paiza.io In einem solchen Fall ist die Ausführung einfacher

Die Version, als dies gemacht wurde, ist wie folgt. Sie können die Version in Hilfe überprüfen.

Ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] Java openjdk version "12" 2019-03-19

Umfang Geschichte

Sowohl Java als auch Ruby sind öffentlich, geschützt und privat. Da das Konzept jedoch unterschiedlich ist, werden die Begriffe getrennt.

öffentlich ist das gleiche und hat keine Einschränkungen, aber geschützt und privat sind unterschiedlich.

Für Details habe ich es in einer Java-ähnlichen Interpretation geschrieben, während ich auf [hier] verwiesen habe (https://qiita.com/tbpgr/items/6f1c0c7b77218f74c63e).

Das Konzept des Pakets privat scheint in Ruby nicht zu existieren.

Klassenumfang

Es gibt öffentliche (nicht beschrieben) und private. Ich sehe die Situation, in der ich eine Klasse, die keine innere Klasse ist, als private Klasse, nicht, weil ich anscheinend keine Chance habe, sie im Web zu verwenden (Eindruck bisher). Sie erfahren außerdem, um welchen Umfang es sich bei Bedarf handelt.

Ich habe das Gefühl, dass ich in letzter Zeit keine inneren Klassen in Java verwendet habe, daher werde ich den Umfang in diesem Artikel nicht behandeln. Bitte beachten Sie.

Methodenumfang

Es gibt öffentliche (nicht beschriebene), geschützte und private.

Es scheint gut zu denken, dass die Öffentlichkeit dieselbe ist, deshalb werde ich zwei verschiedene Dinge beschreiben.

private Ich werde es von der Person sagen, die den Unterschied leicht zu überprüfen war. Bitte lesen Sie zunächst den folgenden Beispielcode.

class A
    private def print
       p "a"
    end
end

class B < A
    def print2
        print
    end
end

b = B.new
b.print2

Im Gegensatz zu Java funktioniert Rubys Private auch dann, wenn Sie es von einer anderen Klasse als der Klasse verwenden. In dem Artikel, auf den ich mich bezog, heißt es, dass die auf "privat" gesetzte Methode nur im Funktionsformat aufgerufen werden kann, sodass sie auch aus der Unterklasse aufgerufen werden kann, die im Funktionsformat aufgerufen werden kann. Es funktioniert gut, ist aber für einen Java-Ingenieur etwas unangenehm. Seien Sie also vorsichtig.

Vielleicht hätte ich es tun können, wenn ich gedacht hätte, ich könnte in anderen Fällen nicht darauf zugreifen.

protected Ich habe viel recherchiert, aber ich habe es nicht gesehen, weil ich es oft nicht verstanden habe, und ich habe einen Tweet gesehen, der besagt, dass der Schöpfer, Matz, es jetzt nicht einbauen würde.

Ich denke, es ist okay für Anfänger, es nicht zu sehen, bis sie eine Szene gesehen haben, an die sie sich unbedingt erinnern müssen.

Klasse

Hier gibt es kein besonderes Problem. Die Benutzerseite generiert und verwendet es in Form von class name.new.

public class A {
}
class A
end

Ruby kann die Klasse jedoch folgendermaßen erweitern. Wenn Sie dies tun möchten, können Sie alles tun.

class A
    def print
       p "a"
    end
end

class A
    def print2
        p "b"
    end
end

a = A.new
a.print
a.print2

Sie können sich auch auf die erstellte Instanz erstrecken, um eine Welt zu erstellen, die wirklich alles ist. Dies kann auf die erstellte Instanz beschränkt werden, sodass nicht gesagt werden kann, dass sie nutzlos ist.

class A
    def print
       p "a"
    end
end

a = A.new

#Als singuläre Klasse deklarieren
class << a
    def print2
        p "b"
    end
end

a.print
a.print2

Erbe

Vererbung ist eine Einzelvererbung in Java und Ruby.

Da Java jedoch mehrere Schnittstellen haben kann, ist es möglich, etwas gewaltsames zu tun (insbesondere Java 8 oder höher).

Ruby scheint abstrakte Klassen, Methoden und Schnittstellen sprachlich nicht zu unterstützen, daher ist die vollständige Vererbung eine einzelne Klassenvererbung. Es gibt Mixin und Delegation (Sie müssen eine Bibliothek verwenden), aber es scheint, dass es sich um völlig unterschiedliche Konzepte handelt, und es scheint besser, sie als von der Vererbung getrennt zu betrachten. (In diesem Artikel nicht behandelt, Modul ist auch einmal ausgeschlossen)

public class A extends B {
}
class A < B
end

Methode

Die Methoden werden in solche ohne Argumente und solche mit Argumenten unterteilt.

Keine Argumente

Mit Ruby können Sie () weglassen. Beachten Sie, dass für Ruby keine Rückgabewertdeklaration erforderlich ist. Daher ist es schwierig, diese zu verstehen, ohne Docs zu schreiben. Der Rückgabewert von Ruby beschreibt die Rückgabe, oder das Ergebnis des zuletzt ausgewerteten Ausdrucks wird zurückgegeben. Java muss die Rückkehr klar beschreiben.

public void method() {
    System.out.println("a");
}
def method
    print "a"
end

Ruby kann auch beim Aufrufen weggelassen werden. Ich bin überrascht, daher denke ich, dass es in der Regel besser ist, festzulegen, welche Art von Beschreibung ohne sie verwendet werden soll.

method()
method

Mit Argument

Ruby kann () weglassen, auch wenn es ein Argument gibt. Gleiches gilt für den Anrufer.

public void method(String a, String b) {
    System.out.print(a);
    System.out.print(b);
}
def method a, b
    print a
    print b
end

Methodenverschachtelung

Sie können dies nicht in Java tun, aber in Ruby können Sie eine Methode innerhalb einer Methode deklarieren. Es kann nach dem Verschachteln und Deklarieren verwendet werden und kann vorher nicht verwendet werden.

def method
    print "a"
    
    def methtod2
        print "b"
    end

    methtod2
end

Klassenmethode

Ruby erlaubt es Methoden, zu Klassen zu gehören. In Java scheint es, als könnten Sie es auf die gleiche Weise wie eine statische Methode verwenden (ich denke, die Idee ist anders).

public class A {
    public static void main() {
        System.out.print("a");
    }
}
class A
    def self.method
        print "a"
    end
end

A::method

Wenn Sie es als singuläre Methode deklarieren, können Sie alle Klassenmethoden erstellen. Da die Referenz besagt, dass sie zur Definition mehrerer Methoden geeignet ist, scheint es besser, sie leicht verständlich zu unterteilen.

class A
    def print
       p "a"
    end
end

class << A
    def print2
        p "b"
    end
end

a = A.new
a.print
A::print2

Wenn Sie dies auf eine einzelne Weise tun möchten, können Sie eine Klassenmethode generieren, ohne sie aus der Klasse zu deklarieren.

def A.print2
    p "b"
end

abschließend

Ich habe es vorerst ausgeschrieben, aber ich hatte das Gefühl, dass es einfacher ist, die Ursache für Chaos zu schaffen, deshalb sollte ich fest Teamregeln erstellen und anwenden. Und es gibt Dinge, die ich noch nicht geschrieben habe, aber vorerst hatte ich das Gefühl, dass es gerade genug für Anfänger war, um anzufangen, also werde ich hier aufhören.

Java ist so solide, dass die Freiheit von Ruby verwirrend ist.

Recommended Posts

Java-Ingenieure vergleichen nun, um die grundlegende Grammatik von Ruby Teil 2 (Klassen, Methoden) zu lernen.
Java-Ingenieure im Vergleich zum Erlernen der grundlegenden Grammatik von Ruby jetzt Teil 1 (Basic, Variablen)
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
[Java] Persönliche Zusammenfassung der Klassen und Methoden (grundlegend)
Ruby-Methoden und -Klassen (grundlegend)
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Java] Verschiedene Zusammenfassungen an die Leiter von Klassen und Mitgliedern
Java mit Ramen lernen [Teil 1]
Grundlegende Verwendung von Java Optionaler Teil 1
Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Vergleichen Sie Elemente eines Arrays (Java)
[Java] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Ausgabe des Buches "Einführung in Java"
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
[Förderung des Ruby-Verständnisses (1)] Wenn Sie von Java zu Ruby wechseln, verstehen Sie zuerst den Unterschied.
Ich habe versucht, die Infrastrukturtechnologie der Ingenieure heutzutage mit dem Kochen zu vergleichen.
So finden Sie die Ursache des Ruby-Fehlers
Über die Idee anonymer Klassen in Java
Die Geschichte der Einführung der Ajax-Kommunikation in Ruby
[Java] Der verwirrende Teil von String und StringBuilder
[Ruby] Code zur Anzeige des Tages
Java Willkommen im Sumpf der zweidimensionalen Arrays
Der Teil, dem ich in "Einführung in Ajax in Java-Webanwendungen" von NetBeans verfallen war
Grundlegende Java-Grammatik
Grundlegende Java-Grammatik
Grundlegende Java-Grammatik
Grundlegende Java-Grammatik
[Java] So erhalten Sie die URL der Übergangsquelle
[Java] Grundlegende Zusammenfassung von Java, die nicht von Progate abgedeckt wird ~ Teil 1 ~
Wie schreibe ich Scala aus der Perspektive von Java
[Java] So erhalten Sie den Maximalwert von HashMap
In der Abbildung verstandene Java-Klassen und -Instanzen
Einführung in Java für Anfänger Grundkenntnisse der Java-Sprache ①
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Was Java-Ingenieure benötigen, um sich auf die Java 11-Version vorzubereiten
Ersetzen Sie nur einen Teil des URL-Hosts durch Java