Разное

Программирование ruby: Язык программирования Ruby

Содержание

Обучение программирования на Ruby/Python / Хабр

BASIC и Pascal давно стали стандартом при начальном обучении программиста. Для многих это первый язык со школы или первого курса университета. Однако за десяток лет ситуация практически не изменилась. Действительно ли Basic и Pascal подходят для обучения сейчас? Неужели за десяток лет не появилось ничего лучше?

Подумайте, есль ли причины использовать BASIC и Pascal кроме исторических?

В школе давно понятно — лучше давать не программирование, а основы использования компьютера. Максимум — Logo в среде типа KTurtle.

Но для первых курсов института и усиленного изучения школьников я считаю, лучше использовать Ruby и Python.

Конечно я не настаиваю учить только на Ruby. Но, например, базис дать на Ruby, а более сложное на Java/C# или С (включая управление памятью) — более правильно скажется на становлении программиста.

Далее аргументы.

Проблемы

В начале давайте посмотрим — всё ли так гладко с Pascal и BASIC:

  1. Устаревшие IDE. Конечно консоль в TurboPascal — это круто, но почему бы не использовать более развитые и современные текстовые редакторы? Можно конечно использовать Delphi или Visual Basic.Net, но это профессиональные инструменты с кучей лишних элементов. В них нет просто кнопок Сохранить и Выполнить.
  2. Непрактичность. BASIC и Pascal сейчас всё реже и реже используются на производстве. Формально, 90 % профессиональных программистов так и не используют эти языки на практике.
  3. Сложность. Когда-то они действительно были очень простыми языками программирования. Но прогресс не стоит на месте.
  4. Устаревшее API. В TurboPascal и QBasic нельзя создать оконные приложения или сделать простой веб-сайт. Конечно, для обучения алгоритмам это не нужно — но ведь имея набор современных и «крутых» средств можно увлечь ученика гораздо больше.
  5. Одна парадигма. Одна из проблем современного IT-образования — студенты часто не знают о функциональном подходе, а ООП знаком только по модели C++. Надо ли говорить, что кругозор никогда не мешает. Тем более, что подход C++ далеко не идеален и много задач гораздо удобнее решать по-другому. Мы конечно же сталкиваемся с вопросом курицы и яйца, так как подход C++ часто используют только потому, что только его и преподают. Но пора выходить из этого порочного круга :).
Улучшения

Чем же Ruby и Python кроют эти проблемы:

IDE

Для Ruby и Python есть интерактивная консоль — вы вводите команду и тут же видите её результат. Идеальная площадка для экспериментов:

>> 2 + 2
=> 4
>> a = [1, 2, 3]
=> [1, 2, 3]
>> a << 4
=> [1, 2, 3, 4]
>> a.reject { |i| i % 2 == 0 }
=> [1, 3]

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

Ну и конечно Ruby и Python интерпретируемые языки программирования — так что для работы с ними подойдёт любой текстовый редактор.

Промышленное использование

Промышленно используют Python такие гиганты, как Google, Yahoo!, CERN или NASA. Ruby же с помощью Ruby on Rails активно и агрессивно занимает веб-платформу.

Думаю не надо говорить, что только со знанием Ruby или Python уже можно устроится на нормальную работу, в отличии от Basic (спрос на Delphi-программистов тоже падает).

Кроме того, на Ruby и Python сразу уже можно рассказывать ООП по-серьёзному, без которого сейчас сложно.

Лёгкость

Ruby и Python за счёт множества парадигм, положенных в их основу, имеют много красивых и простых решений.

Например циклы. В Pascal и Basic вам надо думать как реализовать нужный цикл, в Ruby вы указываете что вам нужно сделать:

loop do
  # Бесконечный цикл
end
count.times do |i|
  # Выполняет цикл count количество раз
end
['a', 'b', 'c'].each do |i|
  # Проходится по каждому элементу массива
end

А, например, механизм отступов у Python сразу учит соблюдать правильную «ёлочку».

Применение функций высшего порядка (или делегат) позволяет сделать обработку массивов проще и понятнее.

# Пройдётся по массиву и уберёт элементы, для которых будет возвращено true
[1, 2, 3, 4].reject do |i|
  i % 2 == 0 # Убираем чётные числа
end
# Итог будет [1, 3]

Поскольку на Ruby легко создавать DSL (как бы мини-языки для конкретной задачи), то можно за красивым API скрыть многие тонкости, чтобы преподавать последовательно.

Например, так выглядит определение GUI в Ruby библиотеке Shoes:

Shoes.app {
  button("Push me") do
    alert "You click on button"
  end
}

API

Для Ruby можно снова упомянуть Shoes, так как там просто делать «крутые» интерфейсы с графикой, эффектами и анимацией. Например, код рисует звезду и двигает её за курсором:

Shoes.app {
  @shape = star :points => 5
  motion do |left, top|
    @shape.move left, top
  end
}

Так же ученики смогут написать свой небольшой сайт на Ruby on Rails или более простой Sinatra.

Про стандартные API типа доступа к простой БД SQLite я уже и не говорю.

Мультипарадигмость

Изучение Ruby или Python правильно скажется на развитии ученика :). Ему сразу на одном языке можно показать подходы множества разных школ. Бегло познакомить с функциями высшего порядка и лямбдой из функциональных языков программирования. Взгляд на ООП не будет закрыт только методом C++, а покажет лёгкость и возможности утиной типизации.

Плюшки

Кроме того Ruby и Python гораздо более кроссплатформенны. Они постоянно развиваются сообществом, в отличии от QBasic и Borland Pascal. В них ест поддержка Unicode (так что дети могут вводить свой родной язык в тесты).

Можно сразу научить писать тесты с помощью простой и красивой RSpec:

count.should == 10
array.should include(item)

И много ещё полезных вещей, которые есть у современных языков программирования.

P.S. Статья конечно больше Ruby-ориентированная, но только потому, что я лучше знаю его плюсы и минусы.

P.P.S Вообще-то Python и Ruby дело тоже не ограничивается. Для задач обучения также прекрасно подходят языки типа Groovy или Lua. Просто я с ними широко не работал и отвечать за слова не могу :).

См. также

Hackety Hack — инструмент для обучения программированию на Ruby.

Документация

Здесь вы найдете отсылки к руководствам, урокам и ссылкам, которые могут
быть полезны, если вы почувствуете, что хотите программировать на Ruby.

Установка Ruby

Если вы хотите попробовать Ruby не только в браузере (смотрите ссылки ниже),
но и локально – вам нужно установить Ruby на ваш компьютер.
Вы можете проверить, установлен ли Ruby на ваш компьютер, набрав в терминале

ruby -v

Это должно вывести некоторую информацию об установленной версии Ruby.
Если нет, смотрите страницу установки с различными
способами получить Ruby.

С чего начать

Try Ruby!
Интерактивное введение, которое даст вам возможность попробовать Ruby
прямо в вашем браузере. 15-ти минутная вводная часть нацелена на
начинающих, кто хочет почувствовать возможности языка.
Ruby Koans
Данный ресурс поведет вас по пути просвещения к знаниям о Ruby. Цель
ресурса – изучить язык Ruby, его синтаксис, структуру и несколько
стандартных функций и библиотек. Так же он обучит вас культуре.
Why’s (Poignant) Guide to Ruby
Необычная, но интересная книга, которая научит вас Ruby посредством
историй, шуток и комиксов. Созданное программистом why the lucky stiff,
данное руководство является классикой для изучения Ruby.
Ruby за двадцать минут
Неплохое введение, покрывающее основы Ruby. Прохождение его от начала
до конца не должно занять у вас более двадцати минут.
В Ruby из других языков
Пришли в мир Ruby из другого языка? Будь это C, C++, Java, Perl, PHP
или Python – этот раздел вам поможет!
Learning Ruby
Учебник по Ruby для тех, кто только пришел в мир Ruby и ищет
полноценное введение в концепты и конструкции языка.
Ruby Essentials
Бесплатная онлайн-книга, предоставляющая краткое и легкое руководство
для изучения Ruby.
Learn to Program
Замечательное маленькое руководство от Chris Pine для новичков в
программировании. Если вы не знаете как программировать — начните
отсюда.
Learn Ruby the Hard Way
Отличный набор упражнений с объяснениями, который поможет вам пройти
путь от абсолютно базовых понятий Ruby до ООП и веб-разработки.

Руководства

Programming Ruby
Основополагающая работа по Ruby на английском в первом издании,
книга от Pragmatic Programmers, доступна бесплатно онлайн.
The Ruby Programming Wikibook
Бесплатное онлайн-руководство для начинающих и продвинутых, плюс
полная документация языка.

Документация языка

Ruby Core Reference
Полученная прямиком из исходного кода при помощи RDoc, эта
документация охватывает все классы и модули ядра (такие как String,
Array, Symbol и так далее).
Ruby Standard Library Reference
Так же полученная прямо из исходного кода при помощи RDoc, эта
документация охватывает стандартные библиотеки.
RubyDoc.info
Веб-сайт содержащий в себе документацию о гемах Ruby и Ruby проектах,
расположенных на GitHub.
Ruby & Rails Searchable API Docs
Rails и Ruby документация с умным поиском.
APIdock
Ruby, Rails и RSpec документация с комментариями и заметками
пользователей.
RubyAPI.org
Легко находите и просматривайте классы, модули и методы Ruby.

Редакторы и среды разработки

Для программирования на Ruby вы можете использовать стандартный
редактор вашей операционной системы. Кстати, для более эффективного
написания кода, стоит использовать редактор с поддержкой Ruby (например,
подсветка синтаксиса, просмотр файлов) или среду разработки с
продвинутыми функциями (например, code completion, рефакторинг,
поддержка тестирования).

Далее следует список популярных инструментов, используемых рубистами:

  • Инструменты для Linux и кросс-платформенные инструменты:
  • На Windows:
  • На macOS:

Дальнейшее чтение

Ruby-Doc.org поддерживает актуальный список англоязычных источников.
Также там есть неплохой список книг по Ruby. Если у вас есть
вопросы по Ruby, почтовая рассылка – отличное место их задать.

О Ruby

Удивляетесь, почему Ruby так популярен? Его поклонники называют его красивым,
искусным языком. И в то же время они говорят, что он удобный и практичный.
Что же перевешивает?

Идеалы создателя Ruby

Ruby – это тщательно сбалансированный язык. Его создатель Юкихиро
Мацумото (также известный как “Matz”), объединил части его любимых
языков (Perl, Smalltalk, Eiffel, Ada и Lisp) чтобы сформировать новый
язык, в котором парадигма функционального программирования сбалансирована
принципами императивного программирования.

Он часто повторял, что «пытается сделать Ruby естественным, но не
простым» языком, который отражает жизнь.

Основываясь на этом, он добавляет:

Ruby прост на вид, но очень сложен внутри, подобно
человеческому телу1.

Рост популярности Ruby

Со времени выпуска публичной версии в 1995 году, Ruby привлек внимание
программистов со всего мира. В 2006 году Ruby завоевал массовое признание.
В крупнейших городах по всему миру активно действуют группы
пользователей Ruby, а конференции, посвященные Ruby, заполнены до
предела.

Ruby-Talk, основная рассылка для
обсуждения языка Ruby, содержала в среднем 200 сообщений ежедневно в 2006
году. В последние годы это количество уменьшилось, так как сообщество
стало использовать несколько тематических рассылок вместо одной общей.

Индекс TIOBE, который измеряет рост популярности языков
программирования, помещает Ruby в десятку общепризнанных языков
программирования. Во многом, рост популярности языка приписывается
популярности программного обеспечения, написанного на Ruby, в
особенности – Ruby on Rails, фреймворку для разработки веб-приложений.

Ruby также абсолютно открыт. Открыт для бесплатного использования,
изменений, копирования и распространения.

Всё в Ruby – объекты.

Вначале Matz рассматривал другие языки в поисках идеального синтаксиса.
Вспоминая свои изыскания, он говорил: «Мне нужен был скриптовый язык,
который был бы более мощным, чем Perl, и более объектно-ориентированным,
чем Python2

В Ruby всё – объект. Для каждой частицы информации или кода могут быть
определены собственные свойства и действия. В объектно-ориентированном
программировании свойства называются переменными объекта, а действия –
методами. Чистейший объектно-ориентированный подход Ruby может быть
продемонстрирован парой строк кода, в которых производится действие над
числом.

5.times { print "Мы любим Ruby! Ruby – это замечательно!" }

Во многих языках числа и другие примитивные типы данных не являются
объектами. Ruby под влиянием языка Smalltalk позволяет задать методы и
переменные объекта всем типам данных. Это упрощает использование Ruby,
так как правила применимые к объектам – применимы ко всему Ruby.

Гибкость Ruby

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

Например, сложение выполняется операцией плюс (+). Но, если вы хотите
использовать для этого более читаемое слово plus – вы можете добавить
такой метод прямо в Numeric, внутренний класс языка Ruby.

class Numeric
  def plus(x)
    self.+(x)
  end
end

y = 5.plus 6
# y теперь равно 11

Операторы в Ruby – синтаксический сахар для методов. Вы также можете
переопределить их.

Блоки — по-настоящему выразительная конструкция

Блоки в Ruby также являются отличным источником гибкости. Программист
может добавить замыкание к любому методу, описывая, как этот метод
должен действовать. Замыкание — это блок, являющийся одной из
наиболее популярных конструкций для пришедших в мир Ruby из мира императивных
языков программирования, таких как PHP или Visual Basic.

Создание блоков было вдохновлено функциональными языками
программирования. Мац (Matz) говорил, «замыканиями в Ruby я хотел отдать дань
уважения культуре языка Lisp3

search_engines =
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end

В коде выше блок описан внутри конструкции do ... end.
Метод map применяет блок кода к представленному списку слов. Многие
другие методы в Ruby оставляют путь, открытый для программиста, чтобы
тот написал собственный блок кода, детально говорящий методу, что тот
должен сделать.

Ruby и примеси

В отличие от многих объектно-ориентированных языков, Ruby намеренно предоставляет
лишь одиночное наследование. Но Ruby также предоставляет концепцию модулей
(называемых «категориями» в Objective-C). Модули – это коллекции методов.

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

class MyArray
  include Enumerable
end

В основном, рубисты находят это более прозрачным, нежели множественное
наследование, которое может быть довольно сложным и иметь какие-либо
ограничения.

Визуальное представление Ruby

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

  • var — может быть локальной переменной.
  • @var — переменная объекта.
  • $var — глобальная переменная.

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

Помимо основ

Ruby полон другими особенностями и конструкциями, и вот некоторые из них:

  • В Ruby есть конструкции для обработки исключений, как в Java или Python,
    которые позволяют проще работать с ошибками.

  • В Ruby представлен настоящий сборщик мусора типа mark-and-sweep
    (пометь и отчисти) для всех Ruby0объектов. Не нужно вручную отслеживать
    количество ссылок в сторонних библиотеках. Как говорит Matz,
    «Это полезней для вашего здоровья.»

  • Писать расширения на C в Ruby проще, чем в Perl или Python при помощи
    очень элегантного API для вызова Ruby из C. Он включает в себя вызовы
    для встраивания Ruby в программное обеспечение, чтобы использовать его
    как скриптовый язык. Также доступен интерфейс SWIG.

  • Ruby может подгружать сторонние библиотеки динамически, если позволяет
    операционная система.

  • В Ruby реализованы независимые от операционной системы потоки.
    Таким образом, на любых платформах, где вы запускаете Ruby, вы также
    можете использовать многопоточность, не зависимо от того,
    поддерживает ли данная система потоки или нет. Вы можете использовать
    возможности многопоточности даже в MS-DOS!

  • Ruby отличается высокой переносимостью: он был разработан большей
    частью на GNU/Linux, но работает на многих типах UNIX, macOS,
    Windows, DOS, BeOS, OS/2, и так далее.

Другие реализации Ruby

Ruby как язык имеет несколько разных реализаций. Данный сайт
посвящен реализации MRI (“Matz’s Ruby Interpreter” – Ruby
интерпретатор Матца) или CRuby, но также существует несколько
других. Они бывают очень полезны в различных ситуациях, предоставляют
большую интеграцию с другими языками или окружениями, или имеют
возможности, которых нет в MRI.

Список реализаций:

  • JRuby — это Ruby, реализованный на JVM (Java Virtual Machine),
    использует оптимизированный JIT-компилятор, сборщик мусора, нативные
    потоки, инструментальную экосистему и огромное количество библиотек JVM.
  • Rubinius это — «Ruby написанный на Ruby». Реализован на основе LLVM –
    изящной виртуальной машине, на который созданы и другие известные
    языки.
  • mruby — это легковесная ре

10 причин для перехода на Ruby / Хабр

Я познакомился с Ruby сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails. Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время.

Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java, а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание кода для меня это некая форма развлечения, а уж потом все остальное. В начале у меня были размышления, какой язык изучать, Python или Ruby. Я выбрал второй, так как не хотел, чтоб неправильные отступы были причиной неполадок в моем коде.

Есть целая куча введений, руководств, статьей и эссе, написанных гуру, о том, как получить максимум пользы от Ruby. Данная статья ничем таким не является.

Это более скромный, неполный перечень причин, которые могут (или не могут) побудить вас использовать Ruby, ну или в крайнем случае поиграть с ним. Предостережение: если вы используете другой язык программирования для работы или в других целях — не жалуйтесь мне, если больше не захотите им пользоваться. Именно это и произошло со мной, но для меня это не столь важно. Ruby чудесный и элегантный язык и как многие подобные вещи, он может захватить ваш разум и поломать душу.

Короче, вы — предупреждены.

Зачем изучать Ruby?

1.Вы получаете все удобства (удовольствия) без уловок.

Ruby позаимствовал все лучшее из других языков программирования, от smalltalk до Java, от Perl до Python. Вот базовые возможности, которые вы в принципе могли видеть и в других языках:

  • Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4, не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
  • Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C++ и Java.
  • Встроенные регулярные веражения: Для всех знатоков Perl, вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~).
  • Перегрузка операторов: Ruby позволяет определять операторы, такие как +, -, >, и т.д. для любого вашего класса.
  • Пакеты: называемые «gems»(камешки), они действительно оправдывают свое название, кроме того — они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
  • Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python

2.Вы полюбите мелочи.

Ruby изящен. Почему? Потому-что он не старается делать код лаконичным настолько, что б это мешало читабельности и пониманию. Есть несколько советов, которые могут вам помочь:

  • Вы можите использовать оба оператора, if и unless в условных выражениях. Кончно же вы можите использовать if с противоположным значением выражения, но использования unless обычно приводит к меньшему числу ошибок. Кроме того, вы можите использовать оба оператора, как условные модификаторы, ставя их после выражения, а не до:order.new unless order.exists
  • Можно использовать знаки вопроса и восклицания в конце имени метода. Данное соглашение не навязывается, но знак «?» используется, когда метод возвращает true или false, в то время, как знак «!» используется для методов, делающих нечто необратимое, на подобии удаления записи из базы данных, отщепления последнего символа из строки и т.п.
  • Можно использовать псевдонимы (alias) для уже созданных методов. Таким образом можно получить методы exist и exists, без накладных расходов и без повторений.
  • Вы можете использовать директивы attr_reader, attr_writer или attr_accessor для автоматического создания getter/setteer для членов класса.
  • И еще некоторое соглашение об именах: константы, классы и модули пишут с заглавной буквы, методы и члены класса должны начинатся с маленькой буквы, глобальные переменные именуют начиная с «$», имена переменных объекта начинаются с «@», а имена переменных класса с «@@», ну и т.д.
  • При вызове методов, можно не писать скобки. Можно писать write File.open("/home/h4rald/test.txt") или просто File.open "/home/h4rald/test.txt", что особенно удобно с методами, без аргументов.

3.Больше не нужно использовать точку с запятой.

Хотите написать следаующую инструкцию? Просто переходите на новую строку. Нажмите «Enter» и готово. В Ruby как и в Python, новая линия разделяет инструкции, так что вам не придется все время ставить точку с запятой. К сожалению это означает, что подобно фанатам C++, мы не сможем написать программу в одну строчку. Но это не так уж и плохо, правда?

4.Все является объектом, как это и должно быть.

Когда я изучал Java, мне говорили, что все является объектом.

— «Че, 14 и 374346.678 — объекты?»

— «Нет, глупыш, это числа!»

В Ruby числа, символы, булевы значения и все остальное является объектом. Серьезно. Это означает, что можно писать вещи подобно этим:
"YOU SHOULDN'T ALWAYS USE CAPITALS".lowcase # вернет "you shouldn't always use capitals", вместо нечто такого:
# PHP Code

strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS")

Этим вы экономите время, экономите скобки и так более логично.

5.Все имеет значение.

Или «больше не надо использовать return для возврата значений». Если побыстрячку, то так: все инструкции в Ruby возвращают значение, даже присваивание переменных, так что вам действительно не нужно использовать ключевое слово «return» в конце методов. Значение последнего присваивания всегда будет возвращено.

6.Можете изменять окружение любым доступным способом.

Впервые увидев это, я был впечатлен. Представьте типичную ситуацию: вы стали использовать системный класс или класс, написаный кем-то другим и поняли, что вам надо некий дополнительный метод в нем. Есть несколько путей для решения этой проблемы в типичных языках программирования:

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

В Ruby вы можете добавить метод в оригинальный класс, без правки исходных кодов. Это можно сделать даже для системного класса.
Мы хотим добавить метод, для пересчета значений из метров в футы? Просто расширим класс Numeric, как показано:
class Numeric

def feet

self*3.2808399

end

end

С этого момента, все наши числа, будут иметь новый метод, который может использоваться, как любой другой:
5.feet # возвратит 16.4041995
Классы в Ruby никогда не закрываются и могут быть расширены в любой момент, из любого места. Естественно использовать такую возможность надо с осторожностью!

7.Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.

Я четко помню, как моя учительница по C++, использовала животных, для иллюстрации основных концепций объектно-ориентированного программирования — классов и наследования. Было нечто загадачно, когда объясняла нам множественное наследование, образовывая «пегаса» из «птиц» и «лошадей». Сумасшедшие вещи, Ruby не позволяет множественного наследования. Это выглядит как тренд и в конце-концов это дело вкуса. Я не в восторге от множественного наследования, так как это может привести к непредсказуемым вещам. Несмотря на это есть возможность создания нечто подобного, используя модули Ruby, так что переменные и методы одного модуля, будут добавлены в определенный класс, если модуль включен в него.

8. XML — реально ненужен.

XML — красивый, общеупотребительный, язык разметки, который может быть обработан всеми языками программирования и используется повсеместно. К сожалению, он слишком громоздкий для написания, трудный для обработки(парсинга) и, давайте будем честны — трудный для чтения в большинстве случаев. А вот взгляните на следующий фрагмент:
regexp: !ruby/regexp /a-zA-Z/

number: 4.

string: a string

Безусловно это легче и проще XML, правда? Добро похаловать в YAML, любимый (но не единственный) язык разметки Ruby, с помошью которого любой объект может быть представлен в простом, лаконичном, но полном виде.
Ruby способен работать с XML, но простота YAML подкупила многих разработчиков, которые теперь используют его вместо XML, например для файлов конфигурации (так поступили в Rails). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:
{"string" => "a string", "number" => 4.7, "regexp" => /a-zA-Z/}.to_yaml
Метод to_yaml, определен для класса Object, который является родителем для всех остальных объектов, а потому доступен для всех объектов Ruby. Это позволяет преобразовывать объекты в YAML и обратно, абсолютно прозрачно для разработчика. Круто, да?

9.Лямбда — нечто больше, чем просто греческая буковка.

Ruby позаимствовал некую магию из Lisp и Perl в объекты и блоки Proc. Proc — это «блок кода, связанный с набором локальных переменных. Однажды связанные, они могут вызываться в различных контекстах и все еще обращаться к тем переменным.». Поглядим на следующе:
def gen_times(factor)

return Proc.new {|n| n*factor }

end

times3 = gen_times(3)

times5 = gen_times(5)

times3.call(12) #=> 36

times5.call(5) #=> 25

times3.call(times5.call(4)) #=> 60


Можно было использовать ключевое слово lambda вместо Proc.new, на результат это не влияет. Это могло показаться знакомым людям, знающим Perl и Python (или Lisp). Такое можно сдалать даже на PHP, но не много людей пользуются этой возможностью.
Кроме того в Ruby широко используются блоки типа «несозданные Proc», например, для итерации по содержимому объекта и исполнения некоторого кода, подобно методу each, доступного для класса Array:
[1, 2, 4, 6, 8].each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end, вместо использования скобок. Фаны Ruby не любят скобок.

10. Вы можете использовать Rails.

Последнее, но не по важности… Вы всегда можете использовать Rails для разработки веб-приложений. Разработка будет не настолько простой, как с PHP, но Rails были написаны на Ruby, поскольку он имет возможности, отсутствующие в других языках.

Заключение

Время вышло. Возможно вы уже задумываетесь о взгляде на Ruby, возможно вы уже пробовали его, а возможно вы просто проигнорировали его. Как бы там нибыло, в следующий раз, когда глядя на свой код, он будет казаться страшным, а размер его устрашающим — не обвиняйте меня.


Уважаемые Читатели — не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.

Ruby за двадцать минут

Вступление

Здесь представлено небольшое введение в Ruby, которое должно занять не
более двадцати минут. Предполагается, что вы уже установили Ruby. (Если
на вашем компьютере нет Ruby, скачайте
и установите его перед тем как начать.)

Интерактивный Ruby

Ruby устанавливается вместе с программой, которая покажет результат
любого Ruby кода, который вы напишете в ней. Играть с кодом Ruby
интерактивно – отличный способ узнать язык.

Откройте IRB (сокращение для Interactive Ruby).

  • Если вы используете macOS, откройте Terminal, наберите
    irb и нажмите Enter.
  • Если вы используете Linux, откройте shell, наберите
    irb и нажмите Enter.
  • Если вы используете Windows, откройте Interactive Ruby из секции
    Ruby вашего меню Пуск.
irb(main):001:0>

Окей, итак он запущен. Что дальше?

Наберите это: "Hello World"

irb(main):001:0> "Hello World"
=> "Hello World"

Ruby повиновался вам!

Что только что произошло? Неужели мы только что написали кратчайшую в
мире программу “Hello World”? Не совсем. Вторая строка, это всего-лишь
способ IRB показать нам результат последнего выполненного выражения.
Если мы хотим напечатать “Hello World”, мы должны написать немного
больше:

irb(main):002:0> puts "Hello World"
Hello World
=> nil

puts – основная команда в Ruby, позволяющая напечатать что-нибудь. Но
что же такое тогда => nil? Это результат выполнения выражения. puts
всегда возвращает nil, который в Ruby обозначает значение
абсолютно-положительного ничего.

Ваш бесплатный калькулятор

Теперь мы знаем достаточно, чтобы использовать IRB как простейший
калькулятор:

irb(main):003:0> 3+2
=> 5

Три плюс два. Достаточно просто. Что насчет три умножить на два? Вы
можете набрать сами, это достаточно короткий код, но также вы можете
вернуться выше и изменить то, что вы ввели ранее. Попробуйте нажать
стрелку наверх на клавиатуре и вы увидите строку с 3+2. Если это
так — вы можете использовать стрелку влево, чтобы переместить курсор
прямо за +, нажать backspace и поменять его на *.

irb(main):004:0> 3*2
=> 6

Теперь давайте попробуем возвести три в квадрат:

irb(main):005:0> 3**2
=> 9

В руби ** – способ возвести число в степень. Но что если вы хотите
пойти в обратном направлении и узнать квадратный корень от чего-либо?

irb(main):006:0> Math.sqrt(9)
=> 3.0

Окей, погодите, что это было? Если вы думаете “это был способ выяснить
квадратный корень из девяти”, вы правы. Но давайте приглядимся к
деталям. Во-первых, что такое Math?

Модули группируют код по темам

Math – это встроенный модуль для математических операций. Модули
выполняют две роли в Ruby. Наш пример показывает первую роль:
сгруппировать похожие методы вместе под знакомым именем. Math также
содержит методы типа sin() и tan().

Следующее – это точка. Что делает точка? Точка – это то, как вы
указываете получателя сообщения. Что такое сообщение? В данном случае
это sqrt(9), которое означает вызов метода sqrt, сокращение от
“square root” (квадратный корень), с параметром 9.

Результат от вызова этого метода – 3.0. Вы можете заметить, что это не
просто 3. Это потому, что большинство значений квадратного корня от
числа не являются целыми, так что метод всегда возвращает число с
плавающей точкой.

Что если мы хотим запомнить результат какой-либо математической
операции? Присвойте это значение переменной.

irb(main):007:0> a = 3 ** 2
=> 9
irb(main):008:0> b = 4 ** 2
=> 16
irb(main):009:0> Math.sqrt(a+b)
=> 5.0

Калькулятор это замечательно, но мы отошли от традиционного сообщения
Hello World, которым начали наше введение и на котором мы должны были
сфокусироваться… так что давайте вернемся к нему.

история становления и перспективы развития / Хабр

Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы. Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому должен уметь быстро и эффективно объяснить ему, что делать.
Юкихиро Мацумото, создатель языка Ruby

Перед каждым, кто желает идти по пути программиста, рано или поздно встаёт вопрос выбора сферы разработки ПО (web, desktop, mobile, игровое, системное,..) и соответствующих инструментов (языков программирования, framework’ов, сред разработки…). Причём здесь, как и в строительстве, важную роль играют материалы и орудия, которые вы используете. По сути, они во многом определяют, что в конечном счёте будет построено, насколько быстро, какими свойствами оно будет обладать и т.д.

К примеру, строитель, работающий с деревом, будет склонен к спокойной и вдумчивой деятельности, кропотливой подгонке деталей, использованию ручного инструмента, индивидуальности в подходе. В то же время каменщик может действовать куда быстрее, пользуясь при этом электроинструментом и компенсируя некоторые неточности с помощью лишнего мастерка раствора 🙂 Ну а бетонщик-монолитчик вообще не заморачивается, его задача — сделать всё максимально просто и надёжно в кратчайшие сроки, а кто уже там будет годами заниматься отделкой и дизайном помещений — его не интересует.

Так и с языками программирования: в каждой из сфер разработки ПО обычно есть минимум два-три языка, способных в принципе справиться с поставленной задачей. Однако подход к решению у этих языков обычно несколько отличается, и тут встаёт вопрос приоритетов в разработке и индивидуальных предпочтений программиста. В конечном итоге важно ваше мышление и понимание того, что нужно сделать и каким образом это потом поддерживать. Так что имеет смысл выбирать именно тот язык, на котором вам будет проще и удобней писать, который даст вам возможность раскрыть свой потенциал.

На то, чтобы более-менее близко познакомиться с новым языком, обычно уходит не менее месяца. Эта статья призвана ответить на вопрос, стоит ли потратить этот месяц на Ruby, или имеет смысл посмотреть в сторону других языков. Сам я сейчас также стою перед выбором: улучшать свои знания в PHP (пока я работал с ним самостоятельно во freelance’е — и на довольно простом уровне, сейчас же есть желание расти дальше) или попробовать «с нуля» в Ruby (сразу освоив с его помощью последние тренды в web-программировании и при этом получив, как я надеюсь, довольно современный и удобный инструмент для работы).

Попробовав разобраться, есть ли у Ruby будущее, и есть ли мне место в нём :), я перечитал несколько сотен статей, обсуждений, сравнений и т.д. Попробую привести мои мысли в более-менее системном виде:

1.

Ruby был задуман в 1993-м году японцем Юкихиро Мацумото, стремившимся создать язык, вобравший из других языков самые лучше подходы, облегчающие труд программиста. Он действовал во многом согласно постулату Абельсона и Сассмана: «Программы должны быть написаны так, чтобы их могли читать люди, и лишь иногда так, чтобы их могли выполнять машины». При этом Мацумото очень хотелось, чтобы это был истинно объектно-ориентированный, простой в использовании высокоуровневый язык. Таким образом, основное назначение Ruby — создание мощных и в то же время понятных программ, где важна не столько скорость работы программы, сколько малое время разработки, понятность и простота синтаксиса. Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Он также унаследовал идеологию языка Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими способами. Люди различны, и им для свободы необходима возможность выбирать: «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы те выбирали лучший путь, если это возможно».

2.

В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году (за период с 1995 по 2002 год в там вышло около двадцати книг о Ruby, и Ruby стал в этой стране более популярным языком, чем Python). Знакомство же международного сообщества началось после перевода его документации на английский язык и создания первых списков рассылки в 1998-м году. После 2000-го года началось распространение Ruby по всему миру, чему способствовало появление англоязычных книг, в первую очередь, «Programming Ruby: The Pragmatic Programmers’ Guide» и «Why’s (Poignant) Guide to Ruby». До 2004-го года Ruby не был широко известен в Европе и США, однако благодаря своим возможностям и большому количеству поддерживаемых платформ Ruby медленно, но верно умножал ряды своих приверженцев. Настоящий же всплеск интереса к Ruby спровоцировало появление Ruby-On-Rails (RoR) — framework’а для разработки web-приложений. RoR стал для Ruby т.н. killer application, катализатором, благодаря которому Ruby получил сейчас признание во всем мире.

3.

Настоящий скачок в развитии и интерес к использованию языка для серьёзных коммерческих проектов начался после выхода Ruby 1.8.0 в 2003-м и новой версии framework’а Ruby on Rails 2.0 в 2007-м году, что вывело программирование на Ruby на новый уровень. Ruby on Rails включает в себя заготовленный функционал для решения практически всех обыденных задач, с которыми сталкиваются современные веб-специалисты. Это значит, что и скорость разработки заметно возрастает. В качестве доказательства можно посмотреть видеоролик, в котором при помощи Ruby on Rails создается полноценный блог всего за пятнадцать минут. К сожалению, скорость работы самого приложения оставалась ещё довольно низкой, и это было одной из причин того, что популярность языка росла довольно медленно. Как заявлял в 2007-м году один из российских разработчиков: «Если говорить о рельсах, то это естественно прорыв. Всё, что я делал для себя на коленке 5 лет, вдруг преподнесли в рамках единого отличного фреймворка. Расстраивает производительность. Причем масштабируемость вполне себе приличная, но наращивать серверы для рельсовых приложений приходится чаще, чем для пайтоновских и перловых аналогов. Если бы не это, мы бы уже перешли на рельсы. Пока используем в целях обучения новых разработчиков правильным подходам к разработке и для прототипирования». К тому же ещё было проблематично найти хостинг (тем более бесплатный), на котором можно было бы разместить приложение на Ruby.

4.

Если до версии 1.8 язык развивался, сохраняя совместимость с предыдущими версиями, то позже разработчики Ruby, во главе с Якихиро Мацумото, решили, что для дальнейшего движения вперёд следует отказаться от 100%-й совместимости. Поэтому разработка Ruby разделилась на две ветви: поддержка версий 1.8.* и создание новых версий 1.9.*, которые являются предтечей следующей версии языка, Ruby 2. Серьёзные изменения к лучшему произошли с выходом Ruby 1.9.1 в 2009-м и Rails 3.0 в 2010-м году, когда большинство упрёков к языку потеряли основание и больше ничего не мешало Ruby занять достойное место среди остальных языков программирования.

Вот пример существенных изменений в скорости выполнения приложений на Ruby:

Согласно рейтингу TIOBE Programming Community Index, на сентябрь 2011-го года Ruby занимает 11-е место (Python — 8-е, PHP — 5-е), а это 1,5% всего рынка, что в мировом масштабе совсем неплохо 😉 К тому же, если обратиться к аналитике Web And Scripting Programming Language Job Trends, то на август 2011-го ситуация будет такой:

Первый график показывает количество предложений работы, и с ним, в принципе, всё понятно, он совпадает с выводами TIOBE Index — спрос на Ruby-программистов есть, и довольно высокий, но он ниже, чем спрос на Python, и значительно ниже, чем на PHP, что и понятно — несравнимы сроки активного использования этих языков.

А вот здесь видно, как растёт интерес к различным языкам, и темпы развития Ruby впечатляют: за последние 2,5 года они возросли в 2,5 раза! Это даёт надежды на то, что у Ruby есть все шансы в скором времени занять свою нишу и в дальнейшем держать довольно большую часть рынка web-разработок. И если ещё в 2009-м году издательство «Питер» сомневалось, есть ли смысл издавать книгу «The Ruby Programming Language» на русском языке, то в начале 2011-го она всё-таки вышла в свет, что говорит о наличии возрастающего интереса к данному языку и среди русскоязычных программистов. Тем более вдохновляют заметки наподобие таких.

Есть и доступная аналитика с репозиториев Open Source проектов.

По статистике компании Black Duck Software, в январе-мае 2011 года на Github было опубликовано 1 153 059 коммитов (записей), на Sourceforge — 624 989, на Google Code — 287 901 и на CodePlex — 49 839. Вот статистика по языкам программирования:

  • C++ (362 077 коммитов)
  • Java (335 992 коммитов)
  • Python (296 896 коммитов)
  • C (264 468 коммитов)
  • JavaScript (251 557 коммитов)
  • Ruby (234 980 коммитов)
  • PHP (154 250 коммитов)
  • C# (125 848 коммитов)
  • Perl (89 720 коммитов)

К тому же Ruby/Rails на данный момент представляют реализацию практически всех наиболее перспективных технологий и подходов к программированию, таких как разработка через тестирование (TDD), полноценная модель реализации концепции MVC, работа с базами данных через ORM (ActiveRecord), шаблоны проектирования (Design Patterns), использование удобного JavaScript-framework’а Prototype (для простой работы с AJAX), работа с распределённой системой контроля версий Git (Github.com), ну и, конечно, его применение в разработке SaaS (Cloud computing), к примеру, на таких проектах, как Heroku.com, Engineyard.com, Basecamphq.com.

Однако здесь нужно понимать, что изучение языков и изучение новых технологий — разные вещи. Изучать новые технологии стоит всегда! Изучение технологии даёт знания и опыт (главное, чтобы ваш язык программирования эту технологию поддерживал). А опыт в нашем нелегком деле — ценнее сертификатов. Конечно, новые cutting-edge-технологии — это всегда какие-то риски, какими бы хорошими словами ни расписывались такие технологии и какими бы качествами они ни обладали. Это риски, связанные со сроками, с кадрами на рынке, с их опытом и уровнем и много других проблем. Однако в качестве заключения я хотел бы привести слова Yehuda Katz (главный разработчик и архитектор Ruby on Rails в EngineYard), сказанные им на RailsConf в 2010-м: «I don’t know any Ruby developers who are unemployed» 😉

Почему Ruby — особенный язык

Юки­хи­ро Мацу­мо­то, автор Ruby, захо­тел создать совер­шен­ный объектно-ориентированный язык, что­бы в нём мак­си­маль­но пол­но рабо­тал ООП-подход. Кро­ме это­го, новый язык дол­жен соблю­дать свод пра­вил, кото­рых при­дер­жи­вал­ся сам Юки­хи­ро и кото­рые сей­час назы­ва­ют­ся «Путь Ruby». Вот неко­то­рые из них:

  1. Язык для чело­ве­ка, а не для ком­пью­те­ра — про­грам­ма долж­на читать­ся лег­ко даже при мини­маль­ном зна­нии Ruby, а всё осталь­ное берёт на себя ком­пью­тер.
  2. Про­сто, но не слиш­ком про­сто — всё долж­но быть про­стым в про­грам­ме, но толь­ко если для это­го не при­дёт­ся услож­нять что-то дру­гое.
  3. Прин­цип наи­мень­шей неожи­дан­но­сти — все коман­ды и дей­ствия в Ruby долж­ны рабо­тать имен­но так, как от них ожи­да­ет про­грам­мист. Если он встре­ча­ет­ся с чем-то новым в язы­ке, то это не долж­но его уди­вить, а, наобо­рот, он вос­при­мет это как что-то есте­ствен­ное.
  4. «Не нуж­но с этим бороть­ся» — про­грам­ми­сту нуж­но исполь­зо­вать то, что есть в язы­ке, вме­сто того, что­бы пытать­ся под­стро­ить язык под себя.

Пер­вая вер­сия Ruby вышла в 1995 году, и за это вре­мя язык вырос от про­ек­та одно­го чело­ве­ка до боль­шо­го комью­ни­ти и 1,27 мил­ли­о­на строк кода. Сей­час Ruby — уни­вер­саль­ный крос­сплат­фор­мен­ный язык про­грам­ми­ро­ва­ния и под­дер­жи­ва­ет­ся все­ми совре­мен­ны­ми вер­си­я­ми Linux и MacOS.

Особенность языка

Пре­лесть и сила Ruby в том, что в нём вооб­ще всё — это объ­ект. Даже чис­ла, зна­че­ния пере­мен­ных и типы дан­ных — это тоже объ­ек­ты. Напри­мер, у вас есть сло­же­ние, кото­рое реа­ли­зу­ет­ся так:

x = 7 + 5

7 и 5 — чис­ла, за кото­рые отве­ча­ет класс Numeric, и этот класс зна­ет про знак сло­же­ния. Давай­те немно­го рас­ши­рим воз­мож­но­сти это­го клас­са:

class Numeric
  def plus(x)
    self + (x)
  end
end
y = 7.plus 5

С это­го момен­та у всех чисел появ­ля­ет­ся метод plus, кото­рый скла­ды­ва­ет это чис­ло со вто­рым. И таким же спо­со­бом мож­но рас­ши­рить свой­ства и воз­мож­но­сти каж­до­го эле­мен­та в про­грам­ме. Сде­лать авто­ма­ти­че­ский пере­вод из минут в секун­ды? Лег­ко:

class Numeric
  def seconds
    self  * 60
  end
end
#теперь можем легко перевести 35 минут в секунды:
time = 35.seconds

И так мож­но делать с чем угод­но, без огра­ни­че­ний и несов­ме­сти­мо­сти типов. Да и какая может быть несов­ме­сти­мость, если типы — это тоже объ­ек­ты, кото­рые мож­но изме­нить. Это дела­ет Ruby похо­жим на C++, где есть пере­груз­ка опе­ра­то­ров и воз­мож­ность исполь­зо­вать коман­ды не так, как заду­ма­но изна­чаль­но.

Синтаксис

На пер­вом месте в Ruby сто­ит чита­бель­ность и про­сто­та, поэто­му этот язык реаль­но осво­ить за неде­лю на базо­вом уровне.

Из замет­ных штук — не нуж­но ста­вить в кон­це каж­дой коман­ды точ­ку с запя­той и все вло­жен­но­сти обо­зна­ча­ют­ся про­бе­ла­ми, точ­но так же как в Python.

Ком­мен­та­рии. Пишем в нача­ле стро­ки знак решёт­ки #, и за ней — ком­мен­та­рий любой дли­ны. Ещё мож­но напи­сать ком­мен­та­рий в несколь­ко строк:

#Это простой однострочный комментарий
x = x + y
=begin
Это тоже комментарий, но в несколько строк.
Чтобы такое сделать, нужно в начале и конце комментария написать =begin и =end, каждый — в начале новой строки.
=end

При­сва­и­ва­ние и мате­ма­ти­че­ские опе­ра­то­ры. Тут всё про­сто: при­сва­и­ва­ние — это знак рав­но «=», а мате­ма­ти­че­ские опе­ра­то­ры такие же, как в жиз­ни — +, -, * и т. д.

Типы дан­ных. Так как в Ruby всё объ­ек­ты, то даже типы дан­ных — это тоже объ­ек­ты, а зна­чит мож­но менять их свой­ства и пове­де­ние. По этой при­чине в Ruby очень мало встро­ен­ных типов дан­ных. Если про­грам­ми­сту пона­до­бит­ся что-то слож­нее, чем встро­ен­ные типы, он лег­ко может создать свой тип с нуля или на осно­ве встро­ен­но­го.

Целые чис­ла: Fixnum (до 2³⁰) и Bignum. Вто­рой тип может хра­нить в себе целые чис­ла вооб­ще любо­го раз­ме­ра, если для них хва­тит места в опе­ра­тив­ной памя­ти.

Дроб­ные чис­ла: Float (чис­ло с пла­ва­ю­щей запя­той), Rational (раци­о­наль­ные чис­ла) и Complex (ком­плекс­ные чис­ла с мни­мой еди­ни­цей).

Стро­ка: String, после­до­ва­тель­ность бай­тов в коди­ров­ке UTF-8, могут быть любой дли­ны.

Сим­вол в Ruby — это не один какой-то сим­вол, а про­сто любая стро­ка, кото­рая оста­ёт­ся неиз­мен­ной. Что­бы ком­пью­тер понял, что это сим­вол, перед ним ста­вит­ся двое­то­чие: symbol = :это_тоже_символ.

Диа­па­зон — за него отве­ча­ет класс Range и в нём хра­нит­ся непре­рыв­ная после­до­ва­тель­ность целых чисел:

 d1 = 1..5   # Две точки — от 1 до 5 включительно.

 d2 = 1…5  # Три точки — от 1 до 4, а 5 уже не входит в этот диапазон.

Услов­ный опе­ра­тор. Стан­дарт­ная фор­ма выгля­дит при­выч­но:

if x > 0 then

  puts «x — положительное число» #puts выводит значение на экран

elsif x < 0 then

  puts «x — отрицательное число» 

else

  puts «x — нуль»

end

Но есть и несколь­ко дру­гих вари­ан­тов услов­но­го опе­ра­то­ра, напри­мер такой:

# Unless означает «Если условие не выполняется, то…»

unless x > 3 then 

  puts x.to_s  # Выведет значение x, если оно НЕ больше трёх.

else 

  puts «очень много, не сосчитать»

end

Цик­лы. В Ruby семь видов цик­лов, пото­му что мож­но менять места­ми нача­ло цик­ла и усло­вия выхо­да из него, добав­лять счёт­чи­ки или опе­ра­тор при­ну­ди­тель­ной оста­нов­ки. Вот как выгля­дят клас­си­че­ские цик­лы со счёт­чи­ком, с пред­усло­ви­ем и с посту­сло­ви­ем:

# Цикл for со счётчиком 
for i in 0 .. list.size-1 do
  print "#{list[i]} "
end
# Цикл с предусловием 
i=0
while i < list.size do
  print "#{ list [i]} "
  i += 1
end
# Цикл с постусловием
i = 0
begin
  print "#{list[i]} "
  i += 1
end until i == list.size

Клас­сы, объ­ек­ты и мето­ды. Так как Ruby пол­но­стью объектно-ориентированный язык, то в нём рабо­та­ет всё, что толь­ко есть в ООП:

  • пуб­лич­ные и при­ват­ные мето­ды,
  • кон­струк­то­ры,
  • насле­до­ва­ние (с помо­щью встро­ен­ных при­ме­сей),
  • пере­опре­де­ле­ние клас­са,
  • и всё осталь­ное, что вам толь­ко пона­до­бит­ся сде­лать с объ­ек­та­ми или клас­са­ми.

Для чего нужен Ruby

Так как Ruby — скрип­то­вый язык, то его мож­но при­ме­нять вооб­ще в любых сфе­рах раз­ра­бот­ки. Напри­мер, мож­но напи­сать пар­сер стра­ниц, кото­рый будет нахо­дить на сай­те интернет-магазина все кар­точ­ки това­ров и ска­чи­вать их назва­ние, цену и фото. Или мож­но сде­лать гене­ра­тор слож­ных паро­лей для всех посе­ти­те­лей сай­та, что­бы им не при­хо­ди­лось при­ду­мы­вать его само­сто­я­тель­но.

Так­же на Ruby пишут мобиль­ные игры и при­ло­же­ния под Android и iOS, исполь­зуя Ruboto или RubyMotion.

Но луч­ше все­го Ruby рабо­та­ет в паре со сво­им зна­ме­ни­тым фрейм­вор­ком Ruby on Rails для созда­ния веб-приложений. Он поз­во­ля­ет быст­ро создать сайт со слож­ной струк­ту­рой, дина­ми­че­ски­ми стра­ни­ца­ми и при этом обой­тись без изу­че­ния SQL-запросов и рабо­ты с база­ми дан­ных.

Ещё эту плат­фор­му любят в стар­та­пах, пото­му что на ней мож­но в корот­кие сро­ки раз­вер­нуть про­то­тип про­ек­та и сра­зу уви­деть его силь­ные и сла­бые сто­ро­ны.

Что сделано на Ruby

Ruby исполь­зу­ют ком­па­нии раз­но­го уров­ня, в том чис­ле NASA, Motorola, Google или GitHub. Вот часть про­ек­тов, кото­рые напи­са­ны на Ruby или Ruby on Rails:

  • Twitter,
  • Kickstarter,
  • SoundCloud,
  • Redmine (систе­ма баг­тре­кин­га),
  • Inkscape (рабо­та с век­тор­ной гра­фи­кой),
  • GitLab (управ­ле­ние репо­зи­то­ри­я­ми кода),
  • SketchUp (трёх­мер­ное моде­ли­ро­ва­ние),
  • Netflix (сери­а­лы),
  • Bloomberg (новост­ное агент­ство).

Если посмот­реть на этот спи­сок, то ста­но­вит­ся понят­но, что Ruby осо­бен­но хорош в веб-разработке и созда­нии сай­тов со слож­ной струк­ту­рой.

С чего начать

Для стар­та вам даже не нуж­но ниче­го уста­нав­ли­вать на ком­пью­тер — исполь­зуй­те онлайн-интерпретатор onlinegdb или rextester.

Что­бы луч­ше разо­брать­ся в язы­ке или его воз­мож­но­стях, почи­тай­те руко­вод­ство «Ruby за 20 минут» на офи­ци­аль­ном сай­те Ruby. Един­ствен­ный момент — это машин­ный пере­вод ори­ги­наль­ной ста­тьи, как и всех осталь­ных рус­ско­языч­ных мате­ри­а­лов на этом сай­те. Поэто­му если зна­е­те англий­ский — луч­ше сра­зу читай­те на нём.

Если есть жела­ние дос­ко­наль­но разо­брать­ся в язы­ке, реко­мен­ду­ем кни­гу Хэла Фул­то­на «Про­грам­ми­ро­ва­ние на язы­ке Ruby» (The Ruby Way).

рубинов за двадцать минут

Введение

Это небольшое руководство по Ruby, которое займет не более 20 минут.
завершить. Предполагается, что у вас уже установлен Ruby.
(Если на вашем компьютере нет Ruby, установите его
прежде, чем вы начнете.)

Интерактивный Ruby

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

Откройте IRB (расшифровывается как Interactive Ruby).

  • Если вы используете macOS , откройте Terminal и введите irb , затем
    нажмите Enter.
  • Если вы используете Linux , откройте оболочку, введите irb и нажмите
    войти.
  • Если вы используете Windows , откройте Interactive Ruby из
    Раздел Ruby в меню «Пуск».
  irb (main): 001: 0>  

Хорошо, он открыт.Что теперь?

Введите это: "Hello World"

  irb (main): 001: 0> "Hello World"
=> «Привет, мир»  

Руби повиновалась тебе!

Что только что произошло? Мы только что написали самое короткое в мире «Hello World»?
программа? Не совсем. Вторая строка — это просто способ IRB сообщить нам
результат последнего вычисленного выражения. Если мы хотим распечатать
«Hello World», нам нужно еще немного:

  irb (main): 002: 0> помещает "Hello World"
Привет мир
=> nil  

устанавливает — это основная команда для вывода чего-либо в Ruby.Но потом
что такое => nil бит? Это результат выражения. ставит
всегда возвращает nil, что является абсолютно положительным нулевым значением Ruby.

Ваш бесплатный калькулятор уже здесь

У нас уже достаточно, чтобы использовать IRB в качестве базового калькулятора:

  irb (основной): 003: 0> 3 + 2
=> 5  

Три плюс два. Достаточно просто. А как насчет трех умножить на два? Ты мог бы
введите его, он достаточно короткий, но вы также можете подняться и
измените то, что вы только что ввели.Попробуйте нажать стрелку вверх на вашем
клавиатуры и посмотрите, появится ли на ней строка с 3 + 2 . Если это так,
вы можете использовать клавишу со стрелкой влево для перемещения сразу после знака + , а затем
используйте backspace, чтобы изменить его на знак * .

  irb (основной): 004: 0> 3 * 2
=> 6  

Далее, давайте попробуем три в квадрате:

  irb (основной): 005: 0> 3 ** 2
=> 9  

В Ruby ** — это то, как вы говорите «во власти».Но что если ты хочешь
пойти другим путем и найти квадратный корень из чего-нибудь?

  irb (основной): 006: 0> Math.sqrt (9)
=> 3.0  

Хорошо, подожди, а что это было в последний раз? Если вы догадались, «это выяснение
квадратный корень из девяти », вы правы. Но давайте подробнее рассмотрим
вещи. Прежде всего, что такое Math ?

Модули группируют код по темам

Math — это встроенный модуль по математике. Модули выполняют две роли в
Рубин.Это показывает одну роль: сгруппировать похожие методы вместе под одним
знакомое имя. Math также содержит такие методы, как sin () и tan () .

Далее стоит точка. Что делает точка? Точка — это то, как вы определяете
получатель сообщения. Что за сообщение? В данном случае это sqrt (9) ,
что означает вызов метода sqrt , сокращение от «квадратного корня» с
параметр 9 .

Результатом вызова этого метода является значение 3.0 . Вы могли заметить, что это
не только 3 . Это потому, что в большинстве случаев квадратный корень из
число не будет целым, поэтому метод всегда возвращает
число с плавающей запятой.

Что, если мы захотим запомнить результат этой математики? Назначьте
результат в переменную.

  irb (основной): 007: 0> a = 3 ** 2
=> 9
irb (основной): 008: 0> b = 4 ** 2
=> 16
irb (основной): 009: 0> Math.sqrt (a + b)
=> 5.0  

Каким бы прекрасным ни был калькулятор, мы уходим от
традиционное сообщение Hello World о том, что предполагается начать обучение
сосредоточиться на… так что вернемся к этому.

.

Документация

Руководства, учебные пособия и справочные материалы, которые помогут вам узнать больше о Ruby

Установка Ruby

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

Начало работы

Официальный FAQ
Официальные часто задаваемые вопросы.
Рубиновые коаны
Коаны проводят вас по пути к просветлению, чтобы учиться
Рубин.Цель — изучить язык Ruby, синтаксис, структуру и
некоторые общие функции и библиотеки. Мы также учим вас культуре.
Почему (острое) руководство по Ruby
Нетрадиционная, но интересная книга, которая научит вас Ruby
через рассказы, остроумие и комиксы. Первоначально созданный почему счастливчик
stiff
, это руководство остается классикой для изучающих Ruby.
Изучение Ruby
Тщательная коллекция заметок о Ruby для тех, кто плохо знаком с
язык и в поисках основательного введения в концепции и
конструкции.
Основы Ruby
Ruby Essentials — это бесплатная онлайн-книга, разработанная для краткого
и простое руководство по изучению Ruby.
Научитесь программировать
Замечательный небольшой учебник Криса Пайна для новичков в программировании. Если
вы не знаете, как программировать, начните здесь.
Жесткий путь изучения рубина
Очень хороший комплекс упражнений с пояснениями, которые помогут вам
абсолютные основы Ruby вплоть до ООП и веб-разработки.

Руководства

Программирование на Ruby
Основополагающая работа над Ruby на английском языке, это первое издание
Книга прагматичных программистов доступна бесплатно в Интернете.
Викибук по программированию на Ruby
Бесплатное онлайн-руководство с содержанием для начинающих и среднего уровня, а также
подробный справочник по языку.

Справочная документация

Официальная документация API
Официальная документация по Ruby API для разных версий, включая
текущая неизданная (основная) версия.
Ссылка на Ruby Core
Получено прямо из исходного кода с помощью RDoc, эта ссылка
work документирует все основные классы и модули (например, String,
Массив, символ и т. Д.…).
Ссылка на стандартную библиотеку Ruby
Этот справочник также извлечен из исходного кода с помощью RDoc.
документирует стандартную библиотеку.
Справочник по API Ruby C
Официальное введение в Ruby’s C API.
Отлично, если вы хотите писать расширения на C
или внести свой вклад в развитие Ruby.
RubyDoc.info
Универсальный веб-сайт для справочной документации о драгоценных камнях Ruby и
Ruby-проекты, размещенные на GitHub.
Ruby & Rails API с возможностью поиска Docs
Документация по Rails и Ruby с интеллектуальным поиском.
APIdock
Документация по Ruby, Rails и RSpec с примечаниями пользователей.
RubyAPI.org
Легко находите и просматривайте классы, модули и методы Ruby.

Редакторы и IDE

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

Вот список популярных инструментов, используемых рубистами:

  • Linux и кроссплатформенные инструменты:
  • В Windows:
  • В macOS:

Дополнительная литература

Ruby-doc.org ведет полный список английских
источники документации. О Ruby также есть много книг.
Если у вас есть вопросы о Ruby,
список рассылки — отличное место для начала.

.

Загрузить Ruby

Здесь вы можете получить последние дистрибутивы Ruby в вашем любимом варианте.
Текущая стабильная версия — 2.7.1.
Обязательно прочтите лицензию Ruby.

Способы установки Ruby

У нас есть несколько инструментов на каждой из основных платформ для установки Ruby:

  • В Linux / UNIX вы можете использовать систему управления пакетами вашего
    дистрибутив или сторонние инструменты (rbenv и RVM).
  • На компьютерах с macOS вы можете использовать сторонние инструменты (rbenv и RVM).
  • На компьютерах с Windows вы можете использовать RubyInstaller.

Подробные сведения об использовании см. На странице «Установка».
системы управления пакетами или сторонние инструменты.

Конечно, вы также можете установить Ruby из исходного кода на всех основных платформах.

Компиляция Ruby — Исходный код

Установка из исходного кода — отличное решение, когда вы
достаточно комфортно с вашей платформой и, возможно, потребуются определенные настройки
для вашей среды. Это также хорошее решение в том случае, если
других готовых пакетов для вашей платформы нет.

Подробную информацию о сборке см. На странице «Установка».
Рубин из исходников. Если у вас есть проблема с компиляцией Ruby, рассмотрите возможность использования
один из сторонних инструментов, упомянутых выше. Они могут вам помочь.

  • Стабильные выпуски:
    • Рубин 2.7.1
      sha256: d418483bdd0000576c1370571121a6eb24582116db0b7bb2005e90e250eae418
    • Рубин 2.6.6
      sha256: 364b143def360bac1b74eb56ed60b1a0dca6439b00157ae11ff77d5cd2e92291
  • Предварительные релизы:
  • На этапе обеспечения безопасности (скоро будет EOL!):
    • Рубин 2.5.8
      sha256: 6c0bdf07876c69811a9e7dc237c43d40b1cb6369f68e0e17953d7279b524ad9a
  • Больше не обслуживается (EOL):
    • Рубин 2.4.10
      sha256: 93d06711795bfb76dbe7e765e82cdff3ddf9d82eff2a1f24dead9bb506eaf2d0
    • Рубин 2.3.8
      sha256: b5016d61440e939045d4e22979e04708ed6c8e1c52e7edb2553cf40b73c59abf
  • Снимков:

Для получения дополнительной информации о конкретных выпусках, особенно о более старых выпусках
или превью см. на странице «Выпуски».Информация о текущем статусе обслуживания различных
Ветви Ruby можно найти на странице «Филиалы».

Для получения информации о репозиториях Ruby Subversion и Git см.
Страница Ruby Core.

Исходный код Ruby доступен из всемирного набора
Зеркало сайтов.
Пожалуйста, попробуйте использовать зеркало, которое находится рядом с вами.

.

рубинов с других языков

Когда вы впервые посмотрите на какой-нибудь код Ruby, он, скорее всего, напомнит вам
другие языки программирования, которые вы использовали. Это сделано специально. Большая часть
синтаксис знаком пользователям Perl, Python и Java (среди прочего
языков), поэтому, если вы их использовали, изучение Ruby станет частью
кекс.

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

Чего ожидать: Language X to Ruby

Важные языковые особенности и некоторые ошибки

Вот несколько указателей и подсказок по основным функциям Ruby, которые вы увидите, когда
изучение Ruby.

Итерация

Две функции Ruby, которые немного отличаются от того, что вы, возможно, видели раньше,
и к которым нужно привыкнуть, это «блоки» и итераторы.Вместо
цикла по индексу (например, в C, C ++ или Java до версии 1.5) или цикла
над списком (например, Perl для (@a) {...} или Python
для i в aList: ... ), с Ruby вы очень часто вместо этого увидите

  some_list.each do | this_item |
  # Мы внутри блока.
  # обработать this_item.
конец  

Для получения дополнительной информации о каждый (и его друзья собирают , находят , вводят ,
sort и т.д.), см. ri Enumerable (а затем ri Enumerable # some_method ).

Все имеет значение

Нет разницы между выражением и утверждением. Все
имеет значение, даже если это значение равно ноль . Это возможно:

  х = 10
у = 11
z = если x  true  

Символы не являются облегченными Строки

Многие новички в Ruby не могут понять, что такое символы и что
их можно использовать.

Символы лучше всего можно охарактеризовать как идентичность.Символ все о
, что это за , а не , что это за . Запустите irb и увидите разницу:

  irb (основной): 001: 0>: george.object_id ==: george.object_id
=> правда
irb (main): 002: 0> "george" .object_id == "george" .object_id
=> ложь
irb (main): 003: 0>  

Методы object_id возвращают идентификатор объекта. Если два
объекты имеют одинаковый object_id , они одинаковые (указывают на одинаковые
Объект в памяти).

Как видите, после того, как вы использовали символ один раз, любой символ с
одинаковые символы ссылаются на один и тот же объект в памяти. Для любых двух
Символы, которые представляют одинаковые символы, object_id совпадают.

Теперь взгляните на Струну («Джордж»). object_id не совпадают.
Это означает, что они ссылаются на два разных объекта в памяти. Всякий раз, когда
вы используете новую строку, Ruby выделяет для нее память.

Если вы сомневаетесь, использовать ли символ или строку, подумайте, что
более важно: идентичность объекта (т.е. ключ Hash) или
содержимое (в приведенном выше примере «Джордж»).

Все является объектом

«Все есть объект» — это не просто гипербола. Даже классы и
целые числа являются объектами, и с ними можно делать то же самое, что и с
любой другой объект:

  # Это то же самое, что
# class MyClass
# attr_accessor: instance_var
# конец
MyClass = Class.new делать
  attr_accessor: instance_var
конец  

Переменные константы

Константы на самом деле не постоянные.Если вы измените уже инициализированный
константа, это вызовет предупреждение, но не остановит вашу программу. Который
Однако нельзя сказать, что следует переопределить константы .

Условные обозначения

Ruby применяет некоторые соглашения об именах. Если идентификатор начинается с
заглавная буква, это постоянная величина. Если он начинается со знака доллара ( $ ),
это глобальная переменная. Если он начинается с @ , это экземпляр
переменная. Если он начинается с @@ , это переменная класса.

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

  Константа = 10
def Константа
  11
end  

Теперь Константа равна 10, но Константа () равна 11.

Аргументы ключевого слова

Как и в Python, поскольку методы Ruby 2.0 могут быть определены
с использованием аргументов ключевого слова:

  def delivery (от: "A", до: nil, через: "mail")
  "Отправка с # {from} на # {to} через # {via}."
конец

доставить (к: "B")
# => «Отправка из пункта А в пункт Б по почте».
доставить (через: «Пони Экспресс», от: «Б», до: «А»)
# => «Отправка из пункта Б в пункт А через Пони Экспресс».  

Универсальная правда

В Ruby все, кроме nil и false , считается истинным. В
C, Python и многие другие языки, 0 и, возможно, другие значения, такие как
пустые списки считаются ложными. Взгляните на следующий Python
код (пример применим и к другим языкам):

  # в Python
если 0:
  print ("0 верно")
еще:
  print («0 - ложь»)  

Будет напечатано «0 — ложь».Эквивалент Ruby:

  # в рубиновом
если 0
  ставит "0 верно"
еще
  ставит "0 ложно"
конец  

Выводит «0 истинно».

Модификаторы доступа применяются до конца области действия

В следующем коде Ruby,

  класс MyClass
  частный
  def a_method; правда; конец
  def another_method; ложный; конец
end  

Можно ожидать, что another_method будет общедоступным. Не так. частный
модификатор доступа продолжается до конца области или до следующего
появляется модификатор доступа, в зависимости от того, что наступит раньше.По умолчанию методы
общедоступный:

  класс MyClass
  # Теперь a_method общедоступен
  def a_method; правда; конец

  частный

  # another_method является закрытым
  def another_method; ложный; конец
конец  

общедоступный , частный и защищенный действительно методы, поэтому они могут принимать
параметры. Если вы передадите символ одному из них, видимость этого метода станет
изменено.

Доступ к методу

В Java public означает, что метод доступен всем. защищенный
означает экземпляры класса, экземпляры классов-потомков и
экземпляры классов в одном пакете могут получить к нему доступ, но не все
else, а private означает, что никто, кроме экземпляров класса, не может
получить доступ к методу.

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

под защитой — это тот, кого нужно искать. Защищенный метод может быть
вызывается из класса или экземпляра класса-потомка, но также и с другим
экземпляр в качестве получателя.
Вот пример (адаптированный из FAQ по языку Ruby):

  класс Тест
  # общедоступный по умолчанию
  идентификатор def
    99
  конец

  def == (другое)
    идентификатор == другой.идентификатор
  конец
конец

t1 = Test.new # => # 
t2 = Test.new # => # 
t1 == t2 # => верно

# теперь делаем `идентификатор 'защищенным; это все еще работает
# потому что protected позволяет `other 'в качестве получателя

класс Test
  защищенный: идентификатор
конец

t1 == t2 # => верно

# теперь сделать ʻidentifier 'приватным

класс Test
  частный: идентификатор
конец

t1 == t2
# NoMethodError: закрытый `идентификатор метода ', вызываемый для #   

Классы открыты

Рубиновые классы открыты.Вы можете открывать их, добавлять к ним и изменять их на
любое время. Даже основные классы, такие как Integer или даже Object , родитель всех
объекты. Ruby on Rails определяет набор методов для работы со временем на
Целое число . Наручные часы:

  класс Целое число
  часы по умолчанию
    self * 3600 # количество секунд в часе
  конец
  псевдоним час часы
конец

# 14 часов с 00:00 1 января
# (иначе, когда ты наконец просыпаешься;)
Time.mktime (2006, 01, 01) + 14.hours # => Sun 01 января 14:00:00  

Смешные названия методов

В Ruby методы могут заканчиваться вопросительными или восклицательными знаками.По соглашению методы, отвечающие на вопросы, заканчиваются вопросительными знаками.
(например, Array # empty? , который возвращает true , если получатель пуст).
Обычно потенциально «опасные» методы заканчиваются восклицательными знаками.
(например, методы, которые изменяют self, или аргументы, exit! и т. д.).
Однако не все методы, которые изменяют свои аргументы, заканчиваются восклицательными знаками.
Array # replace заменяет содержимое массива содержимым
другого массива.Нет смысла иметь такой метод
что не изменяет себя .

Одноэлементные методы

Синглтон-методы — это методы для каждого объекта. Они доступны только на
Объект, на котором вы его определили.

  

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *