Подтвердить что ты не робот

Что делает Ruby элегантным языком?

Я читал много о Ruby последние несколько дней. Каждый столбец, с которым я сталкиваюсь, я слышу, что рубин - элегантный язык. Можете ли вы, ребята, привести пример того, почему рубин элегантен по сравнению с другим языком?

4b9b3361

Ответ 1

Он считается элегантным, потому что он ортогонален. Это фантастический способ сказать, что подобные операции применимы к аналогичным операндам.

Простой пример: + on integers добавляет их; по номерам с плавающей запятой, то же самое. О больших целых числах тоже. В строках он объединяет их (что вы тоже ожидаете). Теперь это не имеет большого значения для +, вы ожидаете его от любого достойного языка программирования. Но есть такие операции, как map или filter, они работают над списками (они должны!), Но они также работают с массивами и фактически на любом, что можно перечислить или повторить через.

Мне нравится, как работает индексирование массива (или списка), вы можете использовать индексы с положительным целым индексом для индексации с начала или отрицательные индексы, чтобы указать позицию назад с конца структуры, вы можете указать диапазон, чтобы вытащить подмножество... это работает и для списков, массивов и (под) строк. Он работает с правой стороны задания (=), он работает и с левой стороны (вы можете назначить подстроку, тем самым заменяя часть строки). Таким образом, вам не нужна функция substring_replace, вы просто используете существующую общую концепцию.

Автор Ruby выразил это с точки зрения удовлетворения ожиданий пользователя (то есть программиста): должно быть как можно меньше сюрпризов, когда здравый смысл заставит вас ожидать, что что-то работает определенным образом, оно просто должно, Он очень много работал, чтобы удовлетворить это требование. Кроме того, хотя Ruby немного заимствован из Perl, автор не согласен с принципом Perl TMTOWTDI в пользу Zen of Python: "Там должно быть быть одним и, возможно, только одним очевидным способом сделать это".

Также приятно, что Ruby закрывает (= блоки кода), поэтому вы можете указать функцию просто, обернув ее в пару фигурных скобок. Есть места, где необходимо указать функцию inline, и Ruby позволяет вам делать это удобно.

Ruby позволяет делать вещи с небольшим количеством кодирования, потому что его конструкции подходят друг другу мощными способами. Я балуюсь в Project Euler, и я нахожу, что часто самые короткие разборчивые и понятные решения были выполнены в Ruby. Самые короткие в J, но что диалект APL и непосвященный он выглядит как линейный шум.

Мой личный опыт говорит об этом: я научил Ruby и Rails и написал веб-приложение со средним сложным анализом данных за одну неделю. Каждый принцип, который я узнал, я мог бы применять в разных местах с разными данными. Это Just Works & trade;!

Ответ 2

  • с открытыми классами, то есть вы можете добавлять методы к классам после их определения.
  • метод_missing, т.е. возможность обработки случаев, когда вы отправляете сообщение, для которого вы не определили метод. Снова это позволяет вам писать код, который адаптируется, а не просто сбой.
  • с Smalltalk-подобной, последовательной моделью OO, например. вы можете делать что-то вроде 1.class 1.times {}. Это делает возможной поддержку DSL.
  • он имеет блоки/блокировки - упрощает запись гибкого кода
  • не тратит время на статическую печать каждой переменной (т.е. пытается решить проблемы, которые не важны, если вы делаете TDD)
  • Вам не нужно использовать OO класса, то есть он поддерживает программирование OO на основе прототипа

Ответ 3

В моем опыте блоки являются самым большим фактором, способствующим элегантности Ruby. что более элегантно, чем писать каждый, чтобы перебирать массивы/хэши/etc...

arr = ["one", "two", "three"]
arr.each { |e|
    puts e
}

Однако я верю в это больше, элегантность языка Ruby также исходит от библиотек. Большинство библиотек продолжали использовать уникальный стиль Ruby для имен функций, таких как "каждый" для итерации или использования "!" а также '?' в конце имен функций для деструктивных/логических возвращающих функций, это то, что действительно сохраняет "элегантный" Ruby.

Ответ 4

Ruby и DSL были обсуждены a .

Пример из sinatra:

get '/' do
    'Hello world!'
end

Или из этого blog:

ChessGame.new do |move|
  move.black_pawn(forward)
  move.white_pawn(forward)
  #…
  move.white_queen(pwn_king)
end

Ответ 5

Ruby - все о производительности и веселья программирования, однако есть несколько причин, почему Ruby элегантен:

  • Pure OOP: все это объект, поэтому вам не нужно различать примитивные и типы объектов.
  • Он поддерживает как функциональные, так и императивные парадигмы программирования: это приводит как к краткому, так и к читаемому коду.
  • Он поддерживает Принцип наименьшего сюрприза: он поддерживает читаемость.
  • У него есть блокировки и блоки: это действительно здорово для Внутренние DSL.
  • У этого есть надежный API метапрограммирования: он также позволяет писать внутренние DSL.
  • Он очень хорош в задачах сценариев: обработка текстовых и xml файлов и выполнение связанных с администрированием материалов (это широко используется системными администраторами в течение нескольких дней).
  • У этого очень крутого и поддерживающего сообщества: вы найдете поддержку и помощь независимо от вашей проблемы. Это сообщество поддерживает современные и фашированные методы кодирования, а также TDD и BDD.

Сумма всего вышесказанного заключается в том, что с помощью Ruby вы можете:

  • Краткий код: по сравнению с Java и С++, по крайней мере, вы можете сэкономить 50% кода ввода текста.
  • Readablility.

Таким образом, с читаемым и сжатым кодом меньше кода для записи меньше кода для тестирования и поддержки Производительность.

Я не должен забывать упомянуть о великом поддерживающем сообществе за Ruby.

Ответ 6

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

Вы можете увидеть результаты перестрелки языка программирования здесь. Вы заметите, что Ruby 1.9 плотно прилегает к левой стороне, что означает, что он очень краток. Я бы сказал, что любой, кто говорит об изящном языке, говорит о языке, который находится на левой стороне или близко. Haskell является одним из единственных заметных исключений, которые я знаю, которые прикладывают много усилий, чтобы добиться определенных целей, но все еще чувствуют себя чрезвычайно элегантно.

Ответ 7

everthing - это объект (ps. как в smalltalk..):

3.times { p "olleh" }

расширяемые/открытые классы (например, из Rails):

10.days_ago

.. и более на рубиновой элегантности: http://www.benhughes.name/files/presentations/ruby_elegance.pdf

Ответ 8

Просто забавная заметка: это похоже на php, но Ruby (с сегодняшнего дня), но первый ответ кажется элегантным Ruby. В PHP я закончил тем, что писал глупый длинный код, как связанный пост, чтобы делать мелочи. Отчасти потому, что лямбды в основном отсутствуют. Поэтому я должен сказать, что поддержка Ruby lambda вместе с картой/уменьшением - вот что делает ее элегантной для меня.