Sto dando una serie di discorsi a un team di sviluppo .NET (C#) sul linguaggio e sull'ambiente Ruby. Mi sto avvicinando come un'opportunità per evidenziare i benefici di Ruby su C#. All'inizio, voglio concentrarmi sul linguaggio stesso prima di trasferirmi nell'ambiente (RoR vs ASP MVC, ecc.). Quali caratteristiche del linguaggio Ruby vuoi coprire?Quali caratteristiche linguistiche di Ruby metteresti in evidenza rispetto a C#?
risposta
Mix-in e ereditarietà multipla.
È pericoloso nelle mani sbagliate, ma molto utile per il corretto incapsulamento delle cose, al contrario di dover ereditare molte cose di cui non è necessariamente necessario.
Né C# né ruby hanno un'ereditarietà multipla ... –
Duck Typing! Questo sarà meno un problema in C# 4.0, ma ci sono state volte in cui ho dovuto duplicare interi blocchi di codice perché due classi correlate con (per i miei scopi) API identiche non condividevano una classe base.
Inoltre, blocchi. C# ha lambda, ma la sintassi di Ruby è più carina e vengono usati in modo pervasivo in tutte le librerie standard. Sono molto più una parte del Ruby idiomatico che del c idiomatico, e ciò conta qualcosa.
Modifica
letterali Hash meritano una menzione, anche. In generale, sottolineo quanto tu possa essere conciso in Ruby, e come questo ti permetta di esprimere meglio l'intento e dedicare meno tempo a cercare di rendere felice il compilatore
+1 per la digitazione di anatra statica, come nei vincoli di membro – MichaelGG
+1 per i blocchi. È una potente funzionalità di Ruby. –
Ho parlato un gruppo di utenti .NET qualche tempo fa su IronRuby, e ha affrontato problemi simili. Le cose su cui mi sono concentrato sono:
Anatra digitando. Non c'è niente di più stupido di
List<string> stringList = new List<string>()
;Sintassi espressiva e concisa. Cose semplici come lasciare parentesi, letterali di array e hash, ecc. (Combinate con la digitazione anatra, si ottiene
string_list = []
che è ovviamente più bello). Tutte le piccole cose che si sommano in grande stile.Metaprogramming. A partire da cose semplici come
attr_accessor
, quindi forse qualcosa di un po 'più avanzato se non ne vedono immediatamente i benefici. Non cercare di confrontare le cose con le parole e le sciocchezze sui programmi che scrivono altri programmi ... le persone penseranno che stai fumando qualcosa. Soggiorno semplice e martello a casa il punto che non devi continuare a scrivere lo stesso codice boilerplate merda piùDa buon "finale", mostrare loro alcuni normali prove di stile NUnit con tutto il casino di
Assert.NotEqual<string> blah
che di solito hanno, quindi dicono "ecco lo stesso codice scritto in ruby" e mostrano loro scritto usando rspec (sarà la metà della lunghezza e 10 volte più facile da leggere ... se questo non li vende, niente lo farà).
Non c'è niente di più stupido di List
Voglio dire, spostarsi è inferenza, cioè (var x = nuova lista
L'inferenza di tipo sicuro è ottima, ma è ancora limitata alle variabili locali. Ho molte definizioni di classe che contengono l'elenco
mi sto avvicinando come un'opportunità per evidenziare i vantaggi di Rubino su C#.
Non sono sicuro che questa sia la cosa giusta da fare. Se il tono dei tuoi discorsi è: "Ruby è bello perché puoi fare x!" perderai il tuo pubblico C# molto rapidamente.Risponderanno, "Possiamo simulare x in C# se vogliamo, ma non abbiamo molto uso per x nei nostri progetti." o forse, "Se pensi di aver bisogno di fare x allora stai sbagliando!"
Non capiranno come Ruby può aiutarli finché non comprendono Ruby. Perché non affrontarli con problemi di giocattoli e mostrare loro come un programmatore Ruby li risolverebbe? Insegna loro la via Ruby. Una settimana dopo, quando stanno osservando un problema che stanno avendo, uno di loro dirà "Beh, beh, so come risolvere questo problema, ma se stavo usando Ruby sarebbe molto più facile ... ."
In aggiunta a ciò che tutti gli altri hanno detto, lezioni aperte è una caratteristica importante di Ruby che vale la pena menzionare: (esempio rubato da 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
Lo so, patching like a monkey should be avoided, ma penso che mettere in evidenza questa caratteristica per i nuovi arrivati dovrebbe dare loro un'idea della filosofia alla base di Ruby. Ricordati di dire: "Bambini, non provatelo a casa!"
hmmm, un po 'equivalente ai metodi di estensione di C# (ma potrebbe essere diverso nei dettagli di implementazione) – niceman
- 1. Quali caratteristiche linguistiche sono necessarie per lo scripting di giochi?
- 2. Quali caratteristiche linguistiche sono richieste in un linguaggio di programmazione per creare un compilatore?
- 3. Ruby caratteristiche prestazioni socket
- 4. operando modulo in Ruby rispetto a PHP
- 5. Quali sono i vantaggi dell'uso di StringIO in Ruby rispetto a String?
- 6. Quali sono le migliori caratteristiche di Scala?
- 7. Quali caratteristiche di __future__ dovrei importare in Python v2.6.2?
- 8. ASP.NET MVC 3 - Quali caratteristiche vuoi vedere?
- 9. Quali sono le caratteristiche del codice spaghetti?
- 10. Quali caratteristiche di C# 5.0 possono essere compilate per l'esecuzione su .net 4.0
- 11. Quali valori per RUBY_ENGINE corrispondono a quali implementazioni di Ruby?
- 12. Quali caratteristiche di Scala non possono essere tradotte in Java?
- 13. Prestazioni di Ruby con più thread rispetto a un thread
- 14. Come limitare l'impatto delle funzionalità linguistiche dipendenti dall'implementazione in C++?
- 15. Quali nuove funzioni e miglioramenti offre Lithium rispetto a CakePHP?
- 16. Quali sono i pro e i contro dell'uso di GenericForeignKey rispetto all'ereditarietà multipla rispetto a OneToOneField?
- 17. == rispetto è uguale a C#
- 18. Quali caratteristiche di Java consentono di creare molto più velocemente di un programma C++ paragonabile?
- 19. Quali sono i vantaggi dell'utilizzo di EJB rispetto a POJO?
- 20. Quali sono i vantaggi di LePUS3 rispetto a UML?
- 21. Quali sono i vantaggi di RecyclerView rispetto a ListView?
- 22. Quali caratteristiche di Zepto non funzionano su ie9?
- 23. Scalabilità di Ruby on Rails rispetto a PHP
- 24. Quali sono le caratteristiche non documentate di Angular?
- 25. Quali sono alcune caratteristiche interessanti del codice sorgente di EveryBlock.com?
- 26. Quali caratteristiche di C++ (98/03) non sono supportate da compilatori scadenti?
- 27. Quali sono i pro e i contro della scrittura di applicazioni C#/XAML rispetto a C++/XAML WinRT in Windows8?
- 28. Costruttore di istanze C# rispetto a Static Constructor
- 29. Layout di memoria Golang rispetto a C++/C
- 30. Cosa sono le proiezioni linguistiche WinRT?
La cultura di SO è tale che non ci piacciono le guerre linguistiche. "Benefici di Ruby over C#" è suscettibile di far funzionare alcune persone. Suggerisco una modifica per essere un po 'meno soggettiva e polemica. –
Non sto cercando di iniziare una guerra linguistica, tuttavia voglio ottenere varie risposte su ciò che rende una lingua (ruby) diversa da un'altra (C#). – jsmorris