Das zweite Mal ist eine Klasse oder Methode.
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
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.
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.
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.
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
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
Die Methoden werden in solche ohne Argumente und solche mit Argumenten unterteilt.
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
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
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
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
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