Je donne une série de conférences à une équipe de développement .NET (C#) sur le langage et l'environnement Ruby. Je l'aborde comme une opportunité pour mettre en évidence les avantages de Ruby sur C#. Au début, je veux me concentrer sur la langue elle-même avant de passer à l'environnement (RoR vs ASP MVC, etc). Quelles caractéristiques de la langue Ruby couvririez-vous?Quelles caractéristiques linguistiques de Ruby mettriez-vous en évidence par rapport à C#?
Répondre
Mélange ins et héritage multiple.
C'est dangereux dans de mauvaises mains, mais plutôt bénéfique pour l'encapsulation correcte des choses, par opposition à avoir à hériter de beaucoup de choses dont vous n'avez pas nécessairement besoin.
Ni C# ni ruby n'ont d'héritage multiple ... –
Dactylographie du canard! Ce sera moins un problème dans C# 4.0, mais il y a eu des moments où j'ai dû dupliquer des blocs entiers de code parce que deux classes liées avec (à mes fins) des API identiques ne partageaient pas une classe de base.
Aussi, blocs. C# a lambdas, mais la syntaxe de Ruby est plus jolie et ils sont utilisés de manière omniprésente dans les bibliothèques standard. Ils font bien plus partie de Ruby idiomatique que de C# idiomatique, et cela compte pour quelque chose.
Modifier
Les littéraux de hachage méritent une mention, aussi. En général, je soulignerais à quel point vous pouvez être concis dans Ruby, et comment cela vous permet d'exprimer mieux l'intention et de passer moins de temps à essayer de rendre le compilateur heureux
+1 pour le typage statique du canard, comme dans les contraintes de membre – MichaelGG
+1 pour les blocs. C'est une caractéristique puissante de Ruby. –
J'ai parlé à un groupe d'utilisateurs .NET il y a quelque temps à propos de IronRuby, et fait face à des problèmes similaires. Les choses sur lesquelles je me suis concentré étaient:
Duck tapant. Il n'y a rien de plus stupide que
List<string> stringList = new List<string>()
;Syntaxe expressive et concise. Des choses simples comme omettre des parenthèses, des tableaux et des littéraux de hachage, etc. (combiné avec le typage de canard, vous obtenez
string_list = []
qui est évidemment plus agréable). Toutes les petites choses qui s'additionnent de façon importante.Métaprogrammation. En commençant par des choses simples comme
attr_accessor
, alors peut-être quelque chose d'un peu plus avancé si elles ne voient pas immédiatement les avantages. N'essayez pas de comparer les choses à des histoires sur les programmes qui écrivent d'autres programmes ... les gens penseront que vous fumez quelque chose. Restez simple et marteler le point que vous ne devez pas continuer à écrire le même code merdique boilerplate plusComme une bonne « finale », leur montrer quelques tests de style NUnit normales avec tout le désordre de
Assert.NotEqual<string> blah
que ils ont généralement, puis disent "voici le même code écrit en rubis" et leur montrent qu'il est écrit en utilisant rspec (ce sera la moitié de la longueur et 10 fois plus facile à lire ... si cela ne les vend pas, rien ne le fera).
Il n'y a rien de plus stupide que Liste
Je veux dire, contourner c'est l'inférence, c'est-à-dire, (var x = new List
L'inférence de type Sure est excellente, mais elle est toujours limitée aux variables locales. J'ai de nombreuses définitions de classe contenant la liste
J'aborde comme une occasion de mettre en évidence les avantages de Ruby sur C#.
Je ne suis pas sûr que ce soit la bonne chose à faire. Si le ton de vos discussions est, "Ruby est cool parce que vous pouvez faire x dedans!" vous allez perdre votre audience C# très rapidement.Ils vont répondre, "Nous pouvons simuler x en C# si nous voulons, mais nous n'avons pas beaucoup d'utilisation pour x dans nos conceptions." ou peut-être, "Si vous pensez que vous devez faire x alors vous le faites mal!"
Ils ne comprendront pas comment Ruby peut les aider jusqu'à ce qu'ils comprennent Ruby. Pourquoi ne pas les emmener à travers des problèmes de jouets et leur montrer comment un programmeur Ruby les résoudrait? Enseignez-leur la méthode Ruby. Une semaine plus tard, quand ils sont confrontés à un problème, l'un d'entre eux dira: «Eh bien, je sais comment résoudre ça, mais si j'utilisais Ruby, ce serait beaucoup plus facile ... . »
En plus de ce que tout le monde a dit, classes ouvertes est une caractéristique importante de Ruby qui convient de mentionner: (exemple volé Ruby From Other Languages)
class Fixnum
def hours
self * 3600 # number of seconds in an hour
end
alias hour hours
end
# 14 hours from 00:00 January 1st
# (aka when you finally wake up ;)
Time.mktime(2006, 01, 01) + 14.hours # => Sun Jan 01 14:00:00
Je sais, patching like a monkey should be avoided, mais je pense que mettre en évidence cette fonctionnalité pour les nouveaux arrivants devrait leur donner une idée de la philosophie derrière Ruby. N'oubliez pas de dire: "Enfants, ne pas essayer à la maison!"
hmmm, quelque peu équivalent aux méthodes d'extensions de C# (mais peut être différent dans les détails d'implémentation) – niceman
- 1. Quelles sont les caractéristiques de Lisp présentes dans Ruby?
- 2. C# génériques par rapport à C++ modèles
- 3. Quelles sont les fonctionnalités linguistiques requises dans un langage de programmation pour créer un compilateur?
- 4. Programmation par rapport à une base de données en C
- 5. Syntaxe Mise en évidence
- 6. Caractéristiques cachées de Erlang
- 7. Allocation statique par rapport à l'allocation dynamique par rapport à l'allocation automatique
- 8. Quelles caractéristiques vous manquent le plus lorsque vous passez d'IntelliJ à XCode?
- 9. SQL server 2008 caractéristiques/avantages?
- 10. Quelle est la performance de F # par rapport à C#?
- 11. Quelles classes Ruby prennent en charge .clone?
- 12. Correctif et correctif par rapport à la version de maintenance par rapport au Service Pack par rapport à
- 13. ArrayList par rapport à un tableau d'objets par rapport à la collection de T
- 14. pour cent supérieur à cent par rapport supérieur à (c.-à -%> vs%>)
- 15. Executors.newCachedThreadPool() par rapport à Executors.newFixedThreadPool()
- 16. Propriété d'énumération C# null par rapport à 0
- 17. Héritage virtuel multiple C++ par rapport à COM
- 18. Quelles caractéristiques techniques pourrais-je inclure dans ma page de traitement des erreurs 404 Fichier introuvable?
- 19. Comment mettre en évidence le texte en PDF WinForms C#
- 20. Conversion de Ruby en C#
- 21. TextWriter.ReadToEnd par rapport à Unix wc Commande
- 22. DLL par rapport à l'Assemblée
- 23. Caractéristiques Lucene.Net
- 24. C# ?? opérateur à Ruby?
- 25. Boîte de sélection orientée par rapport à l'intersection de la boîte de jonction orientée (c/C++)
- 26. Quelles sont les commandes importantes de Ruby?
- 27. C# /. NET comment mettre en évidence certaines lignes dans DataGridView
- 28. Comment mettre en évidence superbes dans l'objectif C
- 29. La qualité de l'équipe par rapport à un processus spécifique
- 30. Performances WCF net.tcp par rapport à namedpipes
La culture de SO est telle que nous n'aimons pas les guerres de langue. "Avantages de Ruby sur C#" est susceptible de faire travailler certaines personnes. Je suggère un montage pour être un peu moins subjectif et argumentatif. –
Je n'essaie pas de déclencher une guerre linguistique, mais je souhaite obtenir des réponses diverses sur ce qui différencie une langue (ruby) d'une autre (C#). – jsmorris