Tag 17 von Dip Adventskalender :)
Java-Ingenieure haben angefangen, Ruby zu schreiben Dies ist ein Artikel, der teilt, was ich dachte: "** Ist das so etwas wie Javas ◯◯! **".
Dieses Mal werde ich über "Codierung" schreiben ...!
Klasse Instanziierung (#Instantisierung) [Methode](# Methode) [Instanziierung (mit Argumenten)](# Instanziierung (mit Argumenten)) [Array / Liste](# Sequenzliste) [Map / Hash](#map Hash) [Was war nützlich zu wissen](# Was war nützlich zu wissen) Schlussfolgerung
Java
Father.java
//Standardpaket
public class Father {
}
Ruby
father.rb
class Father
end
Java
Main.java
//Standardpaket
public class Main {
public static void main(String[] args) {
Father father = new Father();
}
}
Ruby
main.rb
require './father.rb' # ./father.Lesen Sie rb. Ähnlich wie beim Import in Java.
father = Father.new
Java
Father.java
public class Father {
//statische Methode
public static void hello() {
System.out.println("Hello...");
}
//Nicht statische Methode (Instanzmethode)
public void tellTheTruth() {
System.out.println("I am your father.");
}
//Nicht statische Methode (Instanzmethode):Mit Argument
public void fuga(String words) {
System.out.println(words);
}
}
Main.java
public class Main {
public static void main(String[] args) {
Father.hello(); // Hello...
Father father = new Father();
father.tellTheTruth(); // I am your father.
father.fuga("Nooo!!"); // Nooo!!
}
}
Ruby
father.rb
class Father
#Klassenmethode
def self.hello
puts 'Hello...'
end
#Instanzmethode (kein Argument)
# snake_Fallnotation
def tell_the_truth
puts 'I am your father.'
end
#Instanzmethode (mit Argumenten)
def fuga(words)
puts words
end
end
main.rb
require './father.rb'
Father.hello # hoge
father = Father.new
father.tell_the_truth() # I am your father.
father.tell_the_truth # I am your father. ()Kann ausgelassen werden. Es sieht aus wie ein Mitgliedsaufruf, ist aber ein Methodenaufruf.
father.fuga('nooooo!!') # nooooo!!
father.fuga 'nooooo!!' # nooooo!! ()Kann ausgelassen werden. Es wird oft verwendet, ist aber auf der rechten Seite der Methode schwer zu verstehen, daher ist es besser, es zu vermeiden.
In der obigen Instanziierung war es ein Konstruktor ohne Argumente, aber dieses Mal werden wir es mit einem Konstruktor mit Argumenten objektähnlicher machen. Java
Father.java
public class Father {
private String name;
public Father(String name) {
this.name = name;
}
public void tellTheTruth() {
System.out.println("I am " + name + "...");
}
}
Ruby
father.rb
class Father
attr_accessor :name
def initialize(name)
@name = name
end
def tell_the_truth
puts "I am #{name}..."
end
end
initialize
ist der sogenannte Konstruktor.
Außerdem repräsentiert "@ hoge" eine Instanzvariable.
In Java wird es oft als "Feld" oder "Mitgliedsvariable" bezeichnet.
attr_accessor
definiert einen Accessor (sogenannter Getter / Setter).
Tatsächlich ist es dasselbe wie das Schreiben des folgenden Codes.
def name
@name
end
def name=(val)
@name = val
end
Gleich wie Java unten.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Java
Main.java
package com.company;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> words = Arrays.asList("pen", "pineapple", "apple", "pen");
// java5-7
for (String word : words) {
System.out.println(word);
}
//Java8 oder höher
words.forEach(System.out::println);
}
}
Ruby
ppap.rb
words = ['pen', 'pineapple', 'apple', 'pen']
puts words[0] # pen
words.each do |word|
#Die folgende Verarbeitung wird in einer Schleife ausgeführt.
#Das geloopte Objekt wird in Word gespeichert.
#Die erste Schleife ist also'pen'Wird auf der Konsole angezeigt.
puts word
end
Arrays werden durch die Array-Klasse dargestellt. Array - Ruby Reference
# Each
wird häufig zum Wiederholen eines Arrays verwendet.
Es gibt auch eine for-Anweisung, aber wenn Sie sich zuerst an "# each" erinnern, sind die meisten Schleifen in Ordnung.
Der folgende Artikel ist sehr leicht zu verstehen über den "Block", der durch "do" bis "end" dargestellt wird.
Verstehen der Verwendung von [Ruby] -Blöcken und Proc (Es kann verwirrend sein, daher ist es möglicherweise besser, es auf Lager zu halten und später zu lesen.)
Wenn Sie berücksichtigen, dass die Folge von Zeichenfolgen durch die folgende Schreibmethode generiert wird, Es ist weniger wahrscheinlich, dass Sie begeistert sind, von anderen geschriebenen Code zu lesen.
#Generieren Sie ein Array von Zeichenfolgen
words = %w(pen pineapple apple pen)
Verwenden Sie die% -Notation (Prozent-Notation) in Ruby ist in dieser Hinsicht sehr hilfreich. (Lager empfohlen)
Java
Main.java
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "Tauchen");
map.put("service", "Tarako in der Krankenschwester");
System.out.println(map.get("name")); //Tauchen
System.out.println(map.get("service")); //Tarako in der Krankenschwester
}
}
Ruby Es gibt verschiedene Möglichkeiten, Hashes in Ruby zu schreiben.
main.rb
#1 Zeichenfolge als Schlüssel
dip = {'name' => 'Tauchen', 'service' => 'Tarako in der Krankenschwester'}
puts dip['name'] #Tauchen
puts dip['service'] #Tarako in der Krankenschwester
#2 Verwenden Sie das Symbol als Schlüssel.
dip = {name: 'Tauchen', service: 'Tarako in der Krankenschwester'}
puts dip[:name] #Tauchen
puts dip[:service] #Tarako in der Krankenschwester
Die Schreibmethode ist nicht auf die oben genannten beschränkt, und die Unterstützung unterscheidet sich je nach Version. Die folgenden Artikel sind sehr leicht zu verstehen und sollten gelesen werden. Verschiedene Hash-Deklarationsmethoden für Ruby
Der folgende Schreibstil kann Sie verwirren.
Foo::Bar.new
Dies ist der Prozess, der die folgenden Klassen tatsächlich instanziiert.
module Foo
class Bar
end
end
Eine der Rollen des Moduls besteht darin, einen ** Namespace ** bereitzustellen. (Andere Funktionen wie das Bereitstellen von Methoden.) Es ist ein Konzept ähnlich einem Paket in Java.
Bar.java
package foo;
public class Bar {
}
Fuga.java
package hoge;
import foo.Bar;
public class Fuga {
Bar bar = new Bar();
}
Ähnlich wie oben.
Rubys nil
ähnelt Javas null
, ist aber etwas anders.
nil ist die einzige Instanz der NilClass-Klasse. nil steht für false mit dem falschen Objekt und alle anderen Objekte sind true. class NilClass (Ruby 2.3.0)
Wenn Sie daher eine Methode aufrufen, die in der Klasse nil nicht vorhanden ist, Sie erhalten eine Ausnahme namens "NoMethodError" anstelle einer Ausnahme wie "NullPointerException".
main.rb
#Rufen Sie eine undefinierte Methode auf.
nil.special_method
#Speziell für die Nullklasse_Da es keine Methode gibt, wird der folgende Fehler ausgegeben.
undefined method `special_method' for nil:NilClass (NoMethodError)
Ich persönlich denke, dass Ruby eine schöne Grammatik hat, praktische eingebaute Klassen, und je mehr Sie es verwenden, desto vertrauter wird es. Wenn Sie von Java aus eingeben, erhalten Sie möglicherweise etwas wie "** Ich mache mir Sorgen um etwas ohne Typdeklaration !! **", aber ich denke, Sie werden sich bald daran gewöhnen. (Ich habe mich in 3 Tagen daran gewöhnt.) Wenn Sie eine andere Sprache starten, ändert sich Ihre Ansicht der Originalsprache. Warum also nicht?
Recommended Posts