Какие языковые особенности Ruby вы бы выделили по сравнению с C #? - PullRequest
6 голосов
/ 24 февраля 2009

Я даю серию докладов команде разработчиков .NET (C #) по языку и среде Ruby. Я рассматриваю это как возможность подчеркнуть преимущества Ruby над C #. Сначала я хочу сосредоточиться на самом языке, прежде чем переходить в среду (RoR против ASP MVC и т. Д.). Какие особенности языка Ruby вы бы описали?

Ответы [ 5 ]

10 голосов
/ 24 февраля 2009

Некоторое время назад я говорил с группой пользователей .NET о IronRuby, и столкнулся с похожими проблемами. Вещи, на которых я сосредоточился, были:

  • Утиная машинка. Нет ничего глупее, чем List<string> stringList = new List<string>();

  • Выразительный и краткий синтаксис. Простые вещи, такие как исключение скобок, массивов и хеш-литералов и т. Д. (В сочетании с типом утки вы получаете string_list = [], что, очевидно, лучше). Все мелочи, которые складываются по-крупному.

  • Метапрограммирование. Начиная с простых вещей, таких как attr_accessor, затем, может быть, что-то более продвинутое, если они не сразу увидят преимущества. Не пытайтесь сравнивать вещи о том, как писать программы о других программах ... люди просто подумают, что вы что-то курите. Оставайтесь простыми и забывайте о том, что вам больше не нужно писать тот же самый дерьмовый шаблонный код

  • В качестве хорошего "финала" покажите им несколько обычных тестов в стиле NUnit со всеми беспорядками в Assert.NotEqual<string> blah, которые у них обычно есть, затем скажите "вот тот же код, написанный на ruby", и покажите им, что он написан с использованием rspec (он будет вдвое длиннее и в 10 раз легче читать ... если он их не продаст, ничего не будет).

5 голосов
/ 24 февраля 2009

Я рассматриваю это как возможность подчеркнуть преимущества Ruby по сравнению с C #.

Я не уверен, что это правильно. Если ваш разговор звучит так: «Руби - это круто, потому что вы можете сделать в нем x !» Вы очень быстро потеряете свою аудиторию C #. Они ответят: «Мы можем имитировать x в C #, если захотим, но мы не особо используем для x в наших проектах». или, возможно, «Если вы думаете, что вам нужно сделать x , значит, вы делаете это неправильно!»

Они не поймут, как Руби может им помочь, пока не поймут Руби. Почему бы не разобраться с некоторыми игрушечными проблемами и показать, как их решит программист на Ruby? Научи их Рубиновому пути. Неделю спустя, когда они смотрят на проблему, которая у них есть, один из них скажет: «Ну и дела, я знаю, как решить эту проблему, но если бы я использовал Ruby, это было бы намного проще ... . "

4 голосов
/ 24 февраля 2009

Duck Typing! Это будет меньше проблем в c # 4.0, но были случаи, когда мне приходилось дублировать целые блоки кода, потому что два связанных класса с (для моих целей) одинаковыми API не разделяли базовый класс.

Также блоки. В C # есть лямбды, но синтаксис Ruby более симпатичен, и они широко используются во всех стандартных библиотеках. Они в большей степени являются частью идиоматического Ruby, чем идиоматического c #, и это что-то значит.

Редактировать
Хеш-литералы тоже заслуживают упоминания. В общем, я бы подчеркнул, насколько лаконичным вы можете быть в Ruby, и как это позволяет вам лучше выражать свои намерения и тратить меньше времени на попытки порадовать компилятор

1 голос
/ 24 февраля 2009

В дополнение к тому, что сказали все остальные, Открытые классы - важная особенность Ruby, о которой стоит упомянуть: ( пример, украденный у Ruby с других языков )

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

Я знаю, исправлений, как обезьян, следует избегать , но я думаю, что выделение этой функции для новичков должно дать им представление о философии Ruby. Просто не забудьте сказать: « Дети, не пытайтесь делать это дома! »

1 голос
/ 24 февраля 2009

Смешайте входы и множественное наследование.

Это опасно в чужих руках, но весьма полезно для правильной инкапсуляции вещей, в отличие от необходимости наследовать много вещей, которые вам не обязательно нужны.

...