Программирование ruby: Язык программирования Ruby
Обучение программирования на Ruby/Python / Хабр
BASIC и Pascal давно стали стандартом при начальном обучении программиста. Для многих это первый язык со школы или первого курса университета. Однако за десяток лет ситуация практически не изменилась. Действительно ли Basic и Pascal подходят для обучения сейчас? Неужели за десяток лет не появилось ничего лучше?
Подумайте, есль ли причины использовать BASIC и Pascal кроме исторических?
В школе давно понятно — лучше давать не программирование, а основы использования компьютера. Максимум — Logo в среде типа KTurtle.
Но для первых курсов института и усиленного изучения школьников я считаю, лучше использовать Ruby и Python.
Конечно я не настаиваю учить только на Ruby. Но, например, базис дать на Ruby, а более сложное на Java/C# или С (включая управление памятью) — более правильно скажется на становлении программиста.
Далее аргументы.
Проблемы
В начале давайте посмотрим — всё ли так гладко с Pascal и BASIC:
- Устаревшие IDE. Конечно консоль в TurboPascal — это круто, но почему бы не использовать более развитые и современные текстовые редакторы? Можно конечно использовать Delphi или Visual Basic.Net, но это профессиональные инструменты с кучей лишних элементов. В них нет просто кнопок Сохранить и Выполнить.
- Непрактичность. BASIC и Pascal сейчас всё реже и реже используются на производстве. Формально, 90 % профессиональных программистов так и не используют эти языки на практике.
- Сложность. Когда-то они действительно были очень простыми языками программирования. Но прогресс не стоит на месте.
- Устаревшее API. В TurboPascal и QBasic нельзя создать оконные приложения или сделать простой веб-сайт. Конечно, для обучения алгоритмам это не нужно — но ведь имея набор современных и «крутых» средств можно увлечь ученика гораздо больше.
- Одна парадигма. Одна из проблем современного 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». Вот некоторые из них:
- Язык для человека, а не для компьютера — программа должна читаться легко даже при минимальном знании Ruby, а всё остальное берёт на себя компьютер.
- Просто, но не слишком просто — всё должно быть простым в программе, но только если для этого не придётся усложнять что-то другое.
- Принцип наименьшей неожиданности — все команды и действия в Ruby должны работать именно так, как от них ожидает программист. Если он встречается с чем-то новым в языке, то это не должно его удивить, а, наоборот, он воспримет это как что-то естественное.
- «Не нужно с этим бороться» — программисту нужно использовать то, что есть в языке, вместо того, чтобы пытаться подстроить язык под себя.
Первая версия 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
- Рубин 2.7.1
- Предварительные релизы:
- На этапе обеспечения безопасности (скоро будет EOL!):
- Рубин 2.5.8
sha256: 6c0bdf07876c69811a9e7dc237c43d40b1cb6369f68e0e17953d7279b524ad9a
- Рубин 2.5.8
- Больше не обслуживается (EOL):
- Рубин 2.4.10
sha256: 93d06711795bfb76dbe7e765e82cdff3ddf9d82eff2a1f24dead9bb506eaf2d0 - Рубин 2.3.8
sha256: b5016d61440e939045d4e22979e04708ed6c8e1c52e7edb2553cf40b73c59abf
- Рубин 2.4.10
- Снимков:
Для получения дополнительной информации о конкретных выпусках, особенно о более старых выпусках
или превью см. на странице «Выпуски».Информация о текущем статусе обслуживания различных
Ветви 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
заменяет содержимое массива содержимым
другого массива.Нет смысла иметь такой метод
что не изменяет себя .
Одноэлементные методы
Синглтон-методы — это методы для каждого объекта. Они доступны только на
Объект, на котором вы его определили.
.