Je dirais "Oui". Comme "Matz" a dit quelque chose comme ça dans une de ses conférences, "Les objets Ruby n'ont pas de types." Pas tout, mais la partie qu'il essaie de nous faire comprendre. Pourquoi quelqu'un aurait-il dit "Tout est un objet" alors ? Pour ajouter, il a dit "Les données ont des types, pas des objets".
Donc nous pourrions apprécier ceci.
https://www.youtube.com/watch?v=1l3U1X3z0CE
Mais Ruby ne se soucie guère du type d'objet, juste de la classe. Nous utilisons des classes et non des types. Toutes les données ont donc une classe.
12345.class
'my string'.class
Ils peuvent également avoir des ancêtres
Object.ancestors
Ils proposent également des cours de méta, mais je vous épargne les détails à ce sujet.
Une fois que vous connaissez la classe, vous serez en mesure de rechercher les méthodes que vous pouvez utiliser pour elle. C'est là que le "type de données" est nécessaire. Si vous voulez vraiment entrer dans les détails, la recherche...
"Le modèle objet Ruby"
C'est le terme utilisé pour désigner la façon dont Ruby gère les objets. Tout est interne, donc vous n'en verrez pas beaucoup, mais c'est bon à savoir. Mais c'est un autre sujet.
Oui ! La classe est le type de données. Les objets ont des classes et les données ont des types. Si vous connaissez les bases de données, vous savez qu'il n'existe qu'un nombre limité de types.
blocs de texte numéros
0 votes
Oui1 en ruby c'est le chemin
<object name>.class
.0 votes
@iAmRubuuu : Non, ça ne l'est pas.
#class
renvoie le classe et non le type . C'est pourquoi il est appelé#class
après tout. Le PO a demandé le type, pas la classe. Ces deux éléments sont complètement différents.0 votes
@DaveNewton : Le PO a demandé le type, pas la classe. Ces deux éléments sont complètement différents.
#class
renvoie le classe et non le type .5 votes
@JörgWMittag Pourtant, AFAICR c'est ce que fait `type` en Python, bien que ma mémoire soit floue. Vous auriez besoin de
isinstance
ou vérifier les réponses. Mais dire simplement "NON !!!" n'est pas vraiment utile, n'est-ce pas ? Pensez plutôt à être éducatif.4 votes
@JörgWMittag Bien que je sois compatissant, le PO a fourni un code à imiter en Ruby. A moins que vous ne éduquer le fait que l'OP dise non n'est pas utile, IMO. Et même si vous le faisiez, ce ne serait probablement qu'à titre informatif, puisque l'OP a défini ce qu'il voulait par le biais du code.
0 votes
@DaveNewton : Dans la question, le PO demande le type, pas la classe. Dans l'objet, le PO demande le type, pas la classe. Dans l'exemple de code, le PO pose une question sur le type, pas sur la classe. Je ne vois pas vraiment comment vous pouvez en conclure que le PO s'interroge sur la classe et non sur le type.
0 votes
@JörgWMittag Et vous refusez toujours d'éduquer le PO ou de fournir une réponse correcte.... Pourquoi ? Dans tous les cas, que pensez-vous que la méthode `type` de Python retourne ?
6 votes
@JörgWMittag - en Ruby, tout est un objet, il n'y a donc pas de types primitifs comme en Python (int, long, boolean etc.) En conséquence, dans Ruby, les classes sont des définitions de type. Ce n'est pas limité à Ruby non plus, le mot classe et type sont synonymes dans plusieurs autres langages, et plus largement dans la théorie de la POO.
0 votes
@Slomojo : en OO, le type d'un objet est le protocole qu'il parle. En Ruby, les classes ne définissent pas de protocole, elles définissent mises en œuvre de protocoles. De plus, ils prescrivent une représentation particulière des données. Mais l'un des principes de base de l'OO est que indépendance de la représentation . Oui, en Java, C# et C++, les classes sont également des types, mais si vous utilisez des classes comme types, vous ne faites pas de l'OO, vous faites de la programmation orientée ADT. (Il n'y a rien de mal à cela, mais Ruby est OO, pas orienté ADT.) Ce n'est que si vous utilisez des interfaces comme types que vous faites du OO. (Ce n'est pas une surprise, après tout les interfaces de Java sont )
0 votes
(inspiré par les protocoles d'Objective-C qui sont à leur tour inspirés par l'idée de protocoles de Smalltalk). Tout ceci est expliqué clairement dans William R. Cook Le document de la Commission Comprendre l'abstraction des données, revisité où il explique, entre autres, la différence fondamentale entre les classes et les types.
6 votes
Puisque nous parlons vraiment de Ruby ici, les types et les classes sont synonymes, il n'y a pas de débat à ce sujet, toutes les valeurs sont des objets. Donc pour quiconque parle simplement de Ruby, Classes sont Types. - réf : ruby-lang.org/fr/about
2 votes
JörgWMittag Cet essai est très instructif jusqu'à présent, et je lirai la suite quand j'en aurai l'occasion. En particulier, Cook semble articuler assez bien (et avec beaucoup plus de connaissances de base que moi) pourquoi il est incorrect de prétendre (comme l'a fait un de mes professeurs) que Python, Ruby, et d'autres langages dynamiquement typés "ne sont pas". realmente orienté objet" (ce qu'il voulait probablement dire, sans le réaliser, c'est qu'ils n'étaient pas orientés ADT). Mais Ruby n'est pas typée statiquement, donc elle n'a pas d'ADTs dans le sens décrit par Cook, donc vos objections sur la base de cette distinction ne sont pas utiles.
0 votes
Duplication possible de Vérifier si l'objet Ruby est un booléen.