Статьи

.NET для Ruby: среда Ruby

Переход с .NET на Ruby:

Всем привет! Я слышал, вы хотите перейти с .NET на Ruby. Это не сложная задача, но всегда приятно начать с руководства. Я тоже когда-то был на твоем месте. Мастер .NET, суперзвезда LINQ, гуру CLR, универсал Generics, покоритель WCP, WPF и WF, способный боксировать с лучшими из них. И, может быть, вы тоже, как я; глядя через забор на пастбище Руби, задаваясь вопросом, действительно ли трава зеленее? В соответствии с метафорой о пастбищах, эта серия будет посвящена переходу от .NET к Ruby [1] . В нем мы углубимся в то, как два языка складываются друг с другом. Мы коснемся некоторых элементов более высокого уровня, таких как платформы MVC, платформы тестирования и ORM, но в этом посте мы начнем с основ и выясним, что такое Ruby и какие инструменты вам понадобятся для ознакомления. с. Достаточно метапоста, давайте углубимся.

Что такое рубин?

Первым делом стоит определить, что такое Ruby. Ruby — это динамический, строго типизированный и интерпретируемый язык. C # — статичный, строго типизированный язык . Ruby был создан в середине 1990-х годов Юкихиро Мацумото , для краткости Matz. Прежде всего, Ruby является объектно-ориентированным, на самом деле он настолько объектно-ориентирован, что даже его классы являются объектами, что, как мы рассмотрим в этой серии, является одним из аспектов, делающих Ruby таким мощным. Текущая версия Ruby — 1.9.2, и если она не установлена, вам следует! Чтобы установить Ruby и правильно настроить вашу среду, используйте пост Гленна Гудрича, опубликованный Rails Development 101: RVM . В этом посте предполагается, что у вас уже установлен Ruby.

Командная строка

Ruby запускается в основном из командной строки. В отличие от .NET, rubyists живут в командной строке, и со временем вы полюбите его! Есть IDE, но вы обнаружите, что большинство разработчиков Ruby используют emacs, vim или textmate.

Я настоятельно рекомендую настроить среду * nix [2] . Ruby будет работать на Windows, но это заметно медленнее. Подавляющее большинство разработчиков выполняют свою работу в * nix-средах, поэтому большинство ресурсов, которые вы найдете в сети, будут изогнуты, что облегчит вам переход на Ruby из .NET.

Программы на Ruby запускаются с помощью команды ruby Используя это, мы можем запустить программу Ruby прямо из командной строки:

 ruby -e 'puts "Hello World!"'

Эта команда выведет Hello World! к вашей консоли. -e

Мы также можем запускать программы, помещая наш код в файл с расширением .rbruby Давай попробуем. Внутри файла hello_world.rb

 # hello_world.rb
puts "Hello World!"

Затем в командной строке выполните команду:

 ruby hello_world.rb

Поскольку мы так часто используем командную строку, пробелы могут стать hello_world.rbhello world.rbirb Кроме того, в соглашениях об именах Ruby большая часть кода сохраняется вместо CamelCase, как .NET — есть исключения, но мы оставим соглашения об именах для другого поста.

IRB

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

 irb #=> To start irb 

arr = [1, 2, 3, 4] 
arr.first 
arr.include?(7) 
arr.include?(2) 
arr.join("-") 

exit #=> To exit irb

Из IRB вы можете ввести код Ruby и посмотреть, что произойдет, когда этот код будет выполнен. Приятной особенностью IRB является то, что вы обладаете всеми возможностями Ruby, поэтому вы можете определять модули, классы, методы и функции lamda точно так же, как обычная программа Ruby. Но будьте осторожны, когда вы закроете сеанс IRB, весь код, который вы выполнили, будет утерян, поэтому он делает инструмент обнаружения лучше, чем постоянная среда разработки.

Итак, вот упражнение, чтобы вы познакомились с IRB. Запустите следующие команды и сообщите о том, что они выводят:

 # hello_world.rb
puts "Hello World!" #=> Hello World!

Привет, мир

Итак, мы прошли полный круг и вернулись к примеру программирования Hello World. Важно понять, что здесь происходит, потому что это отличается от .NET:

 # This is a class error
uninitialized constant Object::Foo (NameError)

# This is a method error
undefined method `bar' for main:Object (NoMethodError)

Первое, на что следует обратить внимание, это то, что Ruby не определяет функцию Main, как это делает .NET [3] . Вместо этого Ruby начинается в верхней части вашего файла и читает в нижней части. Этот анализ выполняется с помощью инструмента Matz Ruby Interpreter, более известного как MRI, который является однопроходным анализатором. Это отличается от .NET, который использует многоходовой анализатор. Это означает, что если мы попытаемся вызвать класс или метод, которые интерпретатор еще не прочитал, мы получим ошибку. Когда я переключился с .NET на Ruby, это была одна из проблем, с которой я постоянно сталкивался. Когда это произойдет, вы увидите ошибку, которая выглядит так:

 puts

В программе hello world puts По крайней мере, так выглядит конечный результат. За кулисами то, что мы на самом деле делаем, называет stdout$stdout.puts("Hello World") Код выглядит так:

 $stdout

Это сильно отличается от того, что мы написали, поэтому давайте разберемся с этим. Сначала переменная в Ruby, перед которой стоит знак доллара, относится к глобальной переменной. В этом случае stdout

hello_world.rb По своей сути stdout представляет собой связь между выполняемой программой и контекстом, который ее выполнил — в нашем случае контекст является терминалом, а наша программа — gets * nix-системы запускаются с 3 из этих открытых потоков при запуске программы: stdin , stdout и stderr . Входные данные могут быть извлечены из стандартного ввода в Ruby с использованием puts$stderr.puts("Error Message")вывод , и если мы хотели записать в стандартный поток ошибок, мы можем получить доступ к потоку, используя его глобальную ссылку:

 hello_world.rb

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

 puts "Hello World!"
puts("Hello World!")

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

И на этом ваш первый набег в Ruby завершен. Сейчас все может показаться немного пугающим — мы не слишком много разбирались в коде. Но мы закладываем фундамент, на котором будет основываться эта серия (и в действительности любая публикация на RubySource). Я надеюсь, что вам понравилось, и надеюсь, что вы вернетесь к следующему посту, где мы обсудим классы , методы, переменные и блоки!

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

Сноски

[1] Я бы не хотел, чтобы мы встали не с той ноги. .NET != Ruby .NET — это фреймворк, а Ruby — нет, Ruby — это язык. В этой серии постов мы действительно будем сравнивать C # с Ruby. назад

[2] Для тех из вас, кто пришел из мира Windows, вы, возможно, видели ранее использованный термин * nix, но, возможно, не знали, что он означает. * nix обозначает любую ОС, которая ведет себя как Unix. назад

[3] Главное на самом деле существует. Поскольку Ruby обрабатывает все как объект, Main фактически определяется в объекте верхнего уровня, в котором выполняется ваш скрипт. Если вы хотите проверить это, запишите следующий код в файл с именем test.rb

 # test.rb
puts self.to_s

назад