On m'a posé la question lors de l'entretien et je n'ai pas pu répondre, donc j'ai eu mal, alors je vais l'organiser moi-même.
Ma période d'expérience est la suivante (à partir de juillet 2020)
Langue | Période d'utilisation | Utiliser des applications |
---|---|---|
Python | 2018.5 ~ 2020.3 | (1)Analyse de données, y compris le scraping Web et l'apprentissage automatique sur Jupyter Notebook(2)Script d'exécution AWS Lambda et fichier d'exécution AWS Batch dans MLOps |
Java | 2018.8 ~ 2019.5 | Développement d'applications autonomes avec Java |
Ruby | 2019.11 ~ | Développement d'applications Web avec Rails |
«C'est Java qui a acquis les bases de l'orientation des objets et du développement système, et Ruby on Rails qui a en fait créé l'application Web. --Django en Python n'a fait qu'un tutoriel ―― Puisque PYthon a été utilisé principalement pour l'analyse de données, nous comparerons Java et Ruby, qui ont de l'expérience dans le développement de systèmes.
Java
Ruby
{|x|...}
Ainsi quedo |x| ... end
En autorisant le style d'écriture, chacun/map/Facilité d'écriture lorsqu'il est combiné avec une programmation fonctionnelle telle qu'un filtre/La lisibilité a été grandement améliorée.(Quand j'ai vu ce qui suit pour la première fois, je me demandais vraiment comment ce type d'écriture serait une spécification de langage acceptable.)[1, 2, 3].map do |each_num|
each_num + 1
end
define_method str {...}
send (: method_name, arguments)
Java vs Ruby
Interface Java implémentée <=> Module MixIn Ruby
L'interface Java n'implémente pas le contenu de la méthode
Le contenu du module utilisé pour MixIn de Ruby est implémenté.
Il est prévu que vous ayez besoin de connaître l'appelant au moment de l'écriture du module. Je ne pense pas que ce soit très bon.
La gestion des erreurs est requise pour chaque méthode en Java <=> Non requise dans Ruby --En Java, il est nécessaire de gérer les exceptions (ou de lever explicitement des exceptions) pour chaque méthode. --RuntimeException et IllegalArgumentException n'ont pas besoin d'être
Dans Ruby, si une erreur non gérée se produit dans une méthode, la méthode actuelle est arrêtée à ce stade et l'erreur est héritée par l'appelant.
Au fait, avec `Rails, quand j'ai appris qu'il existe une spécification selon laquelle une réponse HTTP avec une erreur 404 est renvoyée si ActiveRecord :: RecordNotFound qui s'est produit dans l'enregistrement actif n'est pas explicitement gérée par l'action du contrôleur, c'est vraiment le cas. J'ai été impressionné qu'il soit bien fait.
Au fait, dans Golang, l'objet d'erreur est renvoyé comme valeur de retour.
--Le type primitif existe en Java <=> Dans Ruby, toutes les valeurs sont des objets
--En Java, boolean, byte, char, short, int, float long, double
sont des types primitifs.
--Il existe une classe wrapper pour ceux-ci. Par exemple, si vous souhaitez inclure int comme élément de liste, utilisez le type de wrapper java.lang.Integer au lieu de List <int>
pour le rendre List <Integer>
.
--L'avantage d'utiliser le type primitif est [ici](http://itstudy365.com/blog/java-%E3%83%97%E3%83%AA%E3%83%9F%E3%83%86%E3% 82% A3% E3% 83% 96% E5% 9E% 8B% E3% 81% AE% E3% 83% A1% E3% 83% AA% E3% 83% 83% E3% 83% 88% E3% 81% Détaillé en A3% E3% 81% A6 /). Je ne savais pas...
3.each {...}
.
«Cela semble également contribuer à la réputation que Ruby est amusant à écrire.――C'est compliqué et soulignant que les significations de égal à == sont opposées.
== est l'identité
et .equals () est l'équivalence
.
--Utilisez .equals () pour comparer les clés de
hash. (Confirmé sur ici)mais ʻA et B ont des hashCode () différents
.
--Il est permis que ʻA et B's hashCode () soient identiques même si ʻA.equals (B) est faux
. Cependant, dans ce cas, collision se produit dans le hachage implémenté par la méthode chain.
--En Ruby, == est équivalent
et ʻequal? () Est identique--Utilisez eql?
Pour comparer les clés de hachage. C'est la somme de ʻequal ()? + Les classes des deux objets comparés sont-elles les mêmes? `.mais ʻA et B ont un hachage différent ()
.
--Il est permis que ʻA et B hash () soient identiques même si ʻA.eql? (B) est faux
. Cependant, dans ce cas, collision se produit dans le hachage implémenté par la méthode chain.Recommended Posts