Bonjour. Je m'appelle @ sho-hata et j'ai commencé à travailler à domicile dès que j'ai rejoint l'entreprise. Si le travail à domicile a l'avantage de ne pas avoir de temps de trajet, il est difficile de l'allumer et de l'éteindre. Au fait, je n'ai touché que Python jusqu'à présent, mais maintenant que je touche Ruby on Rails au travail, je passe mes journées à étudier tous les jours. Cette fois, comme c'était la première semaine pour moi de commencer à toucher Ruby, j'ai trouvé ["De python à Ruby"](https: // www) dans la section "Introduction à Ruby de multilingue" du ** document officiel de Ruby **. En lisant .ruby-lang.org / ja / documentation / ruby-from-other-languages / to-ruby-from-python /), je m'inquiète souvent pour Ruby et python ** Similitudes / Différences ** J'ai brièvement étudié et résumé. Le contenu sera ajouté le cas échéant. Tous les éléments suivants sont basés sur Ruby.
C'est vraiment pratique, n'est-ce pas? Lorsque vous voulez essayer le code rapidement, cela ressemble à la vraie puissance d'un langage interprété. Environnement d'exécution interactif Ruby
Ruby
irb
irb(main):001:0>
Environnement d'exécution interactif Python
Python
python
>>>
Un petit environnement d'exécution interactif Python riche
Python
ipython
In [1]:
Le conteneur de liste intégré est un tableau de longueur variable. Donc, si vous ajoutez des éléments, le nombre d'éléments augmentera sans autorisation!
Ruby
array1 = [1, 2, 3] # => [1, 2, 3]
array1[3] = 4 # => 4
array1
# => [1, 2, 3, 4]
En Python, les littéraux de chaîne sont immuables. Par conséquent, s'ils ont la même valeur, ils font référence à la même adresse en mémoire.
Python
str1, str2 = "hoge", "hoge"
str1 is str2 # -> True
id(str1) # -> 140682191246064
id(str2) # -> 140682191246064
** * (4/18) post-scriptum **
Dans le cas d'une chaîne de caractères, le même objet est partagé s'il s'agit du même littéral de chaîne de caractères, mais lorsqu'une chaîne de caractères est créée par calcul etc., il fait référence à une adresse mémoire différente même si elle a la même valeur.
A souligné M. @shiracamus. Comme indiqué ci-dessous, lors de la réaffectation d'une valeur à une variable, elle fait référence à une adresse mémoire différente même si elle a la même valeur. En effet, un nouvel objet est créé lors de la réaffectation et sa référence est stockée dans la variable str2.
Python
str1 = "hoge"
str2 = "ho"
str2 += "ge"
str1 == str2 # -> True
str1 is str2 # -> False
id(str1) # -> 140239943766896
id(str2) # -> 140239943767152
Lorsqu'une chaîne de caractères est créée en concaténant des chaînes de caractères littérales par calcul lors de la déclaration d'une variable, si les valeurs sont identiques, la même adresse en mémoire est référencée.
Python
str1 = "hoge"
str2 = "ho" + "ge"
str1 is str2 # -> True
str1 == str2 # -> True
Cependant, si une chaîne de caractères vide est générée lorsque la variable est déclarée et que la réaffectation est effectuée, l'identifiant d'objet de la variable après la réaffectation sera le même que l'identifiant de la variable avec la même valeur. La langue est difficile. .. ..
Python
str1 = "hoge"
str2 = ""
id(str1) # -> 140239943766896
id(str2) # -> 140240212059056
str2 += "hoge"
str1 is str2 # -> True
id(str2) # -> 140239943766896
Cependant, dans Ruby, les littéraux de chaîne sont ** mutables **. Chacun pointe vers une adresse différente en mémoire.
Ruby
str1, str2 = "hoge", "hoge"
p str1.equal?(str2) # => false
p str1.object_id # => 70220509475900
p str2.object_id # => 70220643515600
Cependant, Ruby a des ** symboles ** littéraux qui sont utilisés comme alternative aux littéraux de chaîne, qui ressemblent à des chaînes sur la source et sont traités en interne comme des entiers. Il semble que les symboles soient souvent utilisés car ils sont immuables et consomment moins de mémoire. ~~ Je ne sais rien du symbole ... ~~
Dans Ruby, les identificateurs commençant par une lettre majuscule sont traités comme des constantes. ici, ** Constantes en langage de programmation = Une fois initialisé, son contenu ne peut pas être modifié ** Je pense que c'est la reconnaissance. ** Mais ** Dans Ruby, il est possible de réaffecter à une constante initialisée. (Il semble que ce n'est pas recommandé car cela donne un avertissement) Par conséquent, aucune erreur ne se produit lors de la réaffectation.
Ruby
LANG = "Ruby" # => "Ruby"
LANG = "Python"
warning: already initialized constant LANG
warning: previous definition of LANG was here
# => Ruby
Pour moi, constante dans Ruby = pointe vers le même identifiant d'objet Est-ce l'idée? C'est la reconnaissance. À propos, les constantes ne sont ** pas prises en charge dans Python **, mais lorsqu'il s'agit de variables (= valeurs fixes) ** qui sont traitées comme des constantes, il est préférable de les configurer avec toutes les lettres majuscules et traits de soulignement (_) **. C'est la coutume **.
Python
PREFIX = 'C'est bravo pour le bon travail'
MAX_COUNT = 255
Référence: PEP 8 - Style Guide for Python Code | Python.org
En Python, il existe un objet appelé taple dont les éléments ne peuvent pas être modifiés. Il est utilisé lorsque vous souhaitez créer un conteneur de liste léger avec des éléments fixes ou lorsque vous souhaitez emballer et décompresser plusieurs éléments.
Python
tuple1 = (1, 2, 3)
tuple2 = 1, 2, 3
type(tuple1) # -> <class 'tuple'>
type(tuple2) # -> <class 'tuple'>
Cependant, Ruby n'implémente pas les tuples en tant qu'objets intégrés. Cependant, il semble que vous puissiez faire quelque chose comme tapple en fonction de la façon dont vous l'écrivez.
Ruby
rb_tuple = [1, 2, 3].map(&:freeze).freeze
rb_tuple[2] = 3
# => FrozenError (can't modify frozen Array)
(Référence: L'ingénieur Ruby a étudié Python pour dissiper Python)
Dans Ruby, ** else if ** est écrit comme un moyen d'exprimer ** else if **. En Python, il s'écrit ** elif **, mais la prononciation a changé en tant qu'abréviation pour ** else if **. En regardant les remarques de Mats, le créateur de Ruby, il semble que le plus petit nombre de caractères et l'équilibre de la prononciation soient équilibrés. https://twitter.com/yukihiro_matz/status/1161556434728808448
Même avec le même langage de rangement dynamique, certaines parties uniques à Python / Ruby étaient cachées et cachées. ** C'est le vrai plaisir d'étudier une nouvelle langue pour réfléchir à "quel genre de pensée les concepteurs de langage ont-ils créé la langue?" **! Très amusant!
Recommended Posts