Les ingénieurs Java comparent maintenant pour apprendre la grammaire de base de Ruby Part 2 (classes, méthodes)

introduction

La deuxième fois, c'est une classe ou une méthode.

environnement

paiza.io C'est plus facile à exécuter dans un tel cas

La version à laquelle cela a été fait est la suivante. Vous pouvez vérifier la version depuis Aide.

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

Histoire de la portée

Java et Ruby sont tous deux publics, protégés et privés, mais comme le concept est différent, les termes sont séparés.

public est le même et n'a pas de restrictions, mais protégé et privé sont différents.

Pour plus de détails, je l'ai écrit dans une interprétation de type ingénieur Java en me référant à here.

Le concept de package privé ne semble pas exister dans Ruby.

Portée de la classe

Il y a public (non décrit) et privé. Je ne vois pas la situation où j'utilise une classe qui n'est pas une classe interne comme une classe privée parce que je ne semble pas avoir la chance de l'utiliser sur le Web (impression jusqu'à présent). Vous apprendrez également de quel type de portée il s'agira si nécessaire.

J'ai l'impression que je n'ai pas utilisé de classes internes en Java récemment, donc je ne couvrirai pas la portée de cet article. Notez s'il vous plaît.

Portée de la méthode

Il existe public (non décrit), protégé et privé.

Il semble bon de penser que le public est le même, alors je vais décrire deux choses différentes.

private Je vais le mettre de la personne qui a été facile de vérifier la différence. Tout d'abord, veuillez consulter l'exemple de code ci-dessous.

class A
    private def print
       p "a"
    end
end

class B < A
    def print2
        print
    end
end

b = B.new
b.print2

Contrairement à Java, le privé de Ruby fonctionne même si vous l'utilisez à partir d'une autre classe. En regardant l'article auquel j'ai fait référence, il est dit que la méthode définie sur private ne peut être appelée que dans le format de fonction, donc elle peut également être appelée à partir de la sous-classe qui peut être appelée dans le format de fonction. Cela fonctionne bien, mais c'est un peu désagréable pour un ingénieur Java, alors soyez prudent.

Peut-être aurais-je pu le faire si je pensais ne pas pouvoir y accéder dans d'autres cas.

protected J'ai fait beaucoup de recherches, mais je ne l'ai pas vu parce que souvent je ne le comprenais pas et j'ai vu un tweet disant que le créateur, Matz, ne l'intégrerait pas maintenant.

Je pense que c'est normal pour les débutants de ne pas le voir tant qu'ils n'ont pas assisté à une scène dont ils doivent absolument se souvenir.

classe

Il n'y a pas de problème particulier ici. Le côté utilisateur le génère et l'utilise sous la forme de nom de classe.new.

public class A {
}
class A
end

Cependant, Ruby peut étendre la classe de la manière suivante, donc si vous voulez le faire, vous pouvez faire n'importe quoi.

class A
    def print
       p "a"
    end
end

class A
    def print2
        p "b"
    end
end

a = A.new
a.print
a.print2

Vous pouvez également vous étendre à l'instance créée, afin de créer un monde qui est vraiment n'importe quoi. Cela peut être limité à l'instance générée, on ne peut donc pas dire qu'elle est inutile.

class A
    def print
       p "a"
    end
end

a = A.new

#Déclarer comme une classe singulière
class << a
    def print2
        p "b"
    end
end

a.print
a.print2

Héritage

L'héritage est un héritage unique en Java et Ruby.

Cependant, comme Java peut avoir plusieurs interfaces, il est possible de faire quelque chose d'un peu forcé (en particulier Java 8 ou supérieur).

Ruby ne semble pas prendre en charge les classes abstraites, les méthodes et les interfaces linguistiquement, donc l'héritage complet est un héritage de classe unique. Il y a mixin et délégation (vous devez utiliser une bibliothèque), mais il semble que ce sont des concepts complètement différents, et il semble préférable de les considérer comme séparés de l'héritage. (Non couvert dans cet article, le module est également exclu une fois)

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

Méthode

Les méthodes sont divisées entre celles sans argument et celles avec.

Aucun argument

Ruby vous permet d'omettre (). Notez que Ruby ne nécessite pas de déclaration de valeur de retour, il est donc difficile à comprendre sans écrire Docs. La valeur de retour de Ruby décrit le retour, ou le résultat de la dernière expression évaluée est retourné. Java doit décrire clairement le retour.

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

Ruby peut être omis même lors de l'appel. Je suis surpris, donc je pense qu'il est préférable de définir une règle quant au type de description à utiliser sans elle.

method()
method

Avec argument

Ruby peut omettre () même s'il y a un argument. La même chose est vraie pour l'appelant.

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

Imbrication de méthodes

Vous ne pouvez pas le faire en Java, mais dans Ruby, vous pouvez déclarer une méthode à l'intérieur d'une méthode. Il peut être utilisé après l'imbrication et sa déclaration, et ne peut pas être utilisé avant.

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

    methtod2
end

Méthode de classe

Ruby permet aux méthodes d'appartenir à des classes. En Java, on a l'impression de pouvoir l'utiliser de la même manière qu'une méthode statique (je pense que l'idée est différente).

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

A::method

Si vous la déclarez comme une méthode singulière, il est possible de créer toutes ces méthodes de classe. Étant donné que la référence dit qu'elle convient pour définir plusieurs méthodes, il semble préférable de la diviser d'une manière facile à comprendre.

class A
    def print
       p "a"
    end
end

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

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

Si vous souhaitez le faire d'une seule manière, vous pouvez générer une méthode de classe sans la déclarer à partir de la classe.

def A.print2
    p "b"
end

en conclusion

Je l'ai écrit pour le moment, mais j'ai senti qu'il était plus facile de créer la cause du chaos, donc je devais fermement créer et appliquer des règles d'équipe. Et il y a des choses que je n'ai pas encore écrites, mais pour le moment, j'ai senti que c'était juste assez pour que les débutants commencent, alors je vais m'arrêter ici.

Java est si solide que la liberté de Ruby est déroutante.

Recommended Posts

Les ingénieurs Java comparent maintenant pour apprendre la grammaire de base de Ruby Part 2 (classes, méthodes)
Les ingénieurs Java comparés pour apprendre la grammaire de base de Ruby maintenant Partie 1 (Basique, Variables)
J'ai brièvement résumé la grammaire de base de Ruby
[Java] Résumé personnel des classes et méthodes (basique)
Méthodes et classes Ruby (basiques)
Assurez-vous de comparer le résultat Java compareTo avec 0
[Java] Divers résumés joints aux chefs de classe et aux membres
Java pour apprendre avec les ramen [Partie 1]
Utilisation de base de Java Facultatif Partie 1
Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Comparer les éléments d'un tableau (Java)
[Java] J'ai personnellement résumé la grammaire de base.
Sortie du livre "Introduction à Java"
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
[Promotion de la compréhension de Ruby (1)] Lorsque vous passez de Java à Ruby, commencez par comprendre la différence.
J'ai essayé de comparer la technologie d'infrastructure des ingénieurs ces jours-ci avec la cuisine.
Comment trouver la cause de l'erreur Ruby
À propos de l'idée des classes anonymes en Java
L'histoire de l'introduction de la communication Ajax à Ruby
[Java] La partie déroutante de String et StringBuilder
[Ruby] Code pour afficher le jour
Java Bienvenue dans le marais des tableaux bidimensionnels
La partie à laquelle j'étais accro dans "Introduction à Ajax dans les applications Web Java" de NetBeans
Grammaire de base Java
Grammaire Java de base
Grammaire de base Java
Grammaire de base Java
[Java] Comment obtenir l'URL de la source de transition
[Java] Résumé de base de Java non couvert par Progate ~ Partie 1 ~
Comment écrire Scala du point de vue de Java
[Java] Comment obtenir la valeur maximale de HashMap
Classes et instances Java comprises dans la figure
Introduction à Java pour les débutants Connaissance de base du langage Java ①
Java: utilisez Stream pour trier le contenu d'une collection
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
Ce dont les ingénieurs Java ont besoin pour se préparer à la version Java 11
Remplacez seulement une partie de l'hôte URL par java