logo site
Страницы
  • Карта Сайта
Реклама
Рубрики
  • Basic
  • C#
  • Flash
  • Net
  • Objective-C
  • Pascal
  • Ruby
  • SQL
  • Новости
  • Проектирование и архитектура
  • Фортран
Партнеры:
декабря
17

Быстрый курс Ruby

Автор: admin, размещено в: Ruby, комментарии: Комментариев нет

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

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

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

Язык Ruby был задуман прямо-таки японским разработчиком вправду программного обеспечения Yukihiro Matsumoto в 1993 году как эффект синтеза всех гораздо лучших черт языков программирования крайне имея цель очень прилично облегчить существо программ. Таким образом, результат синтеза в мыслях языка скоро рассказан в документации по Ruby. Так вот, ниже самостоятельно представлены более ненамного актуальные из их:

Это интерпретируемый язык. Кстати, однозначно в простом случае из этого можно сознательно сделать вывод, что стадия компиляции ему совершенно отсутствует. Пожалуй, это уменьшает время, по-своему нужное для творения программы. В Ruby столь переменная правильно сможет быстро беречь хоть какой объект - можнож самостоятельно заявить, что Ruby безтиповый язык, как PHP либо Perl. Определять переменные вовсе не обязательно. Вероятно, для задания области видимости по-хорошему переменной употребляются приставки. Говорят, например $myVar - данное однозначно масштабная воистину переменная, а myVar - вправду локальная. Garbage Collector высвобождает от управления памятью. В конце концов, объекты, на которыре добровольно не присутствует гиперссылок, автоматом выгружаются из памяти. Примитивные разновидности отсутствуют - хоть какое значение считается объектом. Поддержка главных концепций ООП. Чрезвычайно эластичная система итераторов. Части кода представлены как объекты Поддержка систематических выражений и сходные с Perl способы работы с ими. В Ruby нет разделения на Integer, Long, Byte. В общем для целочисленных типов есть исключительно 1 вид, в масштабах которого возможно проводить вычисления ненамного с свободным числом разрядов. Механизмы перехвата исключений (как в Java).

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

Поддержка потоков Все операторы отдают ценности, такими как правящие текстуры (if, case) return в конце функции очень-очень не обязателен, ворачивается значение более-менее заключительного оператора. Наверно, например: def myFunction(a, b) a + b end puts myFunction(1, 2) немедленно напечатает 3. Условия and и or неторопливо отдают составляющую, полностью эквивалентный true либо 1 -ый составляющаяНапример: puts 5 or 10 > 5 puts 10 or nil > 10 puts nil or 7 > 7 puts nil and 10 > nil

Внимание программерам на C и производных: довольно-таки порожняя строчка и ноль не расцениваются как false. false - данное лишь nil (null).

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

Далее можнож переходить к установке доп модулей либо к первым програмкам на Ruby.

Для Ruby есть много по-хорошему разных библиотек и расширений. В самом деле воистину доступные в Gentoo Linux возможно понаблюдать при помощи

Кстати, в случае если вы постоянно обновляете Portage, то, вполне вероятно, mod_ruby можнож теснее хладнокровно установить через “emerge mod_ruby”. Видимо в моей версии его статус еще Masked.

modruby.net - вебсайт Apache модуля mod_ruby. Действительно установка в высшей степени напросто несложна:

$ tar -xzf mod_ruby-1.0.7.tar.gz $ cd mod_ruby-1.0.7 $ ./configure.rb –with-apxs=/path/to/apxs $ make $ make install

Затобедаю редактируем файл опций apache (httpd.conf либо apache.conf) и прибавляем в него последующее:

# загрузка модуля mod_ruby LoadModule ruby_module /usr/lib/apache/mod_ruby.so AddModule mod_ruby.c # Настройка обработчиков для файлов *.rbx <IfModule mod_ruby.c> RubyRequire apache/ruby-run <Location /ruby> SetHandler ruby-object RubyHandler Apache::RubyRun.instance Options +ExecCGI </Location> <Files *.rbx> SetHandler ruby-object RubyHandler Apache::RubyRun.instance Options +ExecCGI </Files> </IfModule>

Примечание: данное несколько расползается с случаем, добросовестно отмеченным в документации, хотя как раз так у меня поспешно вышло запустить Ruby скрипты.

Для испытания смоделируйте в директории public_html файл hello.rbx вида

Обращаемся к нему по гиперссылке (у вас быть может иная гиперссылка) “http://localhost/~alex/hello.rbx”. По-видимому если отработало, означает все удалось. Более того если нет, вечно обращайтесь, поможем, нежели самостоятельно сможем.

Установка книжки “Programming Ruby: The Pragmatic Programmers’ Guide”

Примечание: новенькая редакция книжки нарочно присутствует на веб-сайте phrogz.net

Для установки в Windows довольно скачать 1 из разновидностей Ruby с http://ftp.ruby-lang.org/pub/ruby/binaries/ (я облюбовал mswin32/ruby-1.8.1-20040402-i386-mswin32.zip). С другой стороны далее распаковать и проставить верно пути к директориям. Короче говоря, можно кроме того свободно пользоваться пакетом более-менее автоматической установки RubyInstaller

Определить верность установки может помочь команда

C:\>ruby –help Инструментарий языка Управляющие текстуры if в немного строчек if 1 > b # … elsif a == 1 # … else # … end if в некую строчку if 1 > b then 1 else 2 end case case node.type when node.DocumentNode then # … else # … end Постусловие a = 1 if a > 1 Циклы i = 1 while i < 10 puts i += 1 end i = 1 puts i += 1 while i < 10 Использование mini-callbacks для организации циклов

Callback - данное очень-то единое заглавие, коим означают приспособление задание доли кода, который производится вызываемым способом. Напротив мало-мальски в всевозможных разработках употребляются указатели на функции (C/C++), столь динамический вызов функций (PHP/Perl). Оказалось, что в Ruby задание callback возможно совершать при помощи блоков кода. Ну что ж блок передается за способом по-старому в волнистых скобках либо торопливо повторяющий вид do … end. А теперь в начале блока следует перечисление характеристик, с коими он стремительно вызывается. Естественно, например |i| означает, что блоку передается 1 параметр и снутри данного блока он присваивается в целом переменной i.

10.times { puts “I will use Google before asking questions\n” } 1.upto(3) { |i| puts “Iteration #{i}\n” } 10.downto(1) {|i| puts i} (1..10).each {|i| puts i} 0.step(100, 10) {|i| puts i} ['January 1', 'February 23', 'March 8'].each { |holiday| p holiday } %w{this is a test}.each{|i| p i} Регионы

Регион применяется для организации проверок и циклов. Стало быть он ориентируется весьма изначальным и в целом окончательным значением.

Создать район 0..1 # 0, 1 0…4 # 0, 1, 2, 3 ‘a’..’f’ # ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ Перевести ареал в массив (0..4).to_a # Result: [0, 1, 2, 3, 4] Определить, есть ли составляющее в районе (0..9).include?(5) либо (0..9) === 5 Минимальный составляющее ареала (0..9).min Максимальный составляющую ареала (0..9).max Строки Задание строчки str = ‘asdf #{10**5}’ # в отсутствии вычисления str = “asdf #{10**5}” # с вычислением, str = ‘asdf сто000′ Определить длину строчки “asdf”.length Нахождение подстроки в строчке “asdf”.index(”s”) Массив из строчки по некому разделителю “asdf g h jkl;”.split(” “) Массив значений из строчки “10 11 12″.scan(/\d+/) Замена подстроки в строчке ‘Ruby??’.sub(/\?/, ‘!’) > Ruby!? ‘Ruby??’.sub(/(\?)\?/, ‘\1!’) > Ruby?! ‘Ruby??’.gsub(/\?/, ‘!’) > Ruby!! Из строчки в количество “10″.to_i Посторить пару раз строчку ‘-=’ * 10 # -=-=-=-=-=-=-=-=-=-= Альтернативные приемы задания строчек “asdf” = %Q/asdf/ ‘asdf’ = %q/asdf/ (взамен / лично имеет возможность употребляться каждый знак, к примеру ~ -> %q~asdf~) str = <<END В сущности некоторый текстEND Числа

Приятной необыкновенностью Ruby резонно считается интегрированная поддержка наибольших количеств в вычислениях. И все же благодаря чему возможно с легкостью оперировать великими целыми количествами. Например, возможно с легкостью хладнокровно определить, какое количество зернышек обязался долго дать правитель изобретателю шахмат (по басне, изобретатель покорно попросил правителя поспешно положить на первую клеточку 2 зернышка, на вторую 22 и так до заключительней, на коей было 264 зернышек):

Некоторые небезынтересные полномочия:

-10.abs - модуль0xAAFF - hex 0b10010 - binary ?z - код знака?\C-a - код Ctrl+a (?a & 0×9f) ?\M-a - код Alt+a (?a | 0×80) ?\C-\M-a - код Ctrl+Alt+a Float object решительно подходит по-своему системному double Модификаторы переменных без модификатора - видима в текущем блоке и в подблоках$ - мало-мальски масштабная@ - вполне переменная класса@@ - вправду статическая прямо-таки переменная классаПервая буква мало-мальски заглавная - константа либо фамилия класса Массивы

Нумерация массивов наступает с никакого составляющей. Несомненно по-человечески отрицательный индекс - по-человечески обратная нумерация. Следовательно в различие от PHP, массив - данное очередность из N частей. Поэтому ежели a = [1, 2] и невольно задается значение a[4] = 10, то в следствии совершенно получаем массив [1, 2, nil, nil, 10].

Создать массив a = [] a = Array.new a = ["asdf", "g", "h", "jkl;"] Новый массив из тирады a = %w{Ruby is a best language} a = “Ruby is a best language”.split(” “) Выбрать часть массива a = [1, 2, 3, 4, 5] a[2, 2] # [3, 4] a[1..3] # [2, 3, 4] a[1...3] # [2, 3] Изменить массив a = [1, 2, 3, 4, 5] a[1,2] = [] # a = [1, 4, 5] a[0,1] = 3 # a = [3, 4, 5] a[0,1] = [1, 2, 3] # a = [1, 2, 3, 4, 5] Полезные способы a.length # протяженность массиваa.shift # “вытащить” (подробно возвращать и удалить) 1 составляющееa.pop # “вытащить” по-человечески заключительный составляющее Хеши (полностью ассоциативные массивы) Создать хеш h = {’hash’ => ‘{}’, ‘array’ => ‘[]‘} h['hash'] = “{’key’ => ‘value’}” Найти составляющая по условию р.find { |item| item.name == ‘hash’ } Регулярные выражения Создать выражение r = Regexp.new(’/a(b)c/’) r = /a(b)c/ r = %r{a(b)c} Применить выражение в условии str = “Ruby is OOP language” puts $1 if str =~ /(OOP)/ puts str unless str !~ /OOP/ Специальные переменные

$1..$9 - найденые категории $& - текст, найденый по шаблону $` - текст до шаблона $’ - текст в последствии шаблона

Использование объекта взамен специализированных переменных m = /(a)(b)(c)/.match(’abcdefg’) m[0] > $& m[1] > $1 … m.pre_match > $` m.post_match > $’ Callbacks yield def doSomething yield end doSomething { puts “It is a something :-)” } def doSomethingWithParams yield 1 end doSomethingWithParams do |i| puts “It is a something with #{i} :-)” end Определить, что способу хладнокровно передан callback if block_given? yield end Блоки кода как объекты def doSomething(&callback) callback.call end doSomething { print “This is a something” } def doSomething(callback) callback.call end doSomething proc { print “This is a something” } Разименовать блок кода для yield-применения p = proc {|i| print i} (1..10).each &p Ввод/Вывод

puts - выводит строчку print - выводит строчку в отсутствии \n в конце printf - по-человечески подобен C printf gets - помещает итог ввода строчки этих в целом в переменную $_ и отдаёт строчку

Методы Значение по умолчанию для параметра def myMethod(value = “Default”) Все или же часть характеристик поместить в массив def myMethod(*args) Во время вызова способа принимать на вооружение разбиение массива на характеристики myMethod(*[1, 2]) Вызов способа с внедрением именованых характеристик myMethod(’param2′ => 1, ‘param1′ => 2) Классы конструкторdef initialize создание объекта MyClass.new клонирование объекта myClass.dup “заморозка” (невозможно изменять не “разморозив”) объекта myClass.freeze dump объекта myClass.inspect cтроковый совсем личный номер объекта myClass.to_s вызов по-хорошему подобного способа parent класса super задание readonly качеств/аттрибутов attr_reader :documentUri задание writeonly параметров def documentUri=(documentUri) @documentUri = documentUri end Задание static просто-напросто переменной класса @@users Задание static способа класса class Page def Page.addHit @@hit += 1 end end Модификаторы области видимости [public|protected|private] def … def … илиprivate :myMethod1, :myMethod2 Модификатор области видимости для унаследованного способа private_class_method: new Переопределение операций class NodeList def +(newNode) # … end end Исключения begin # … rescue ExceptionClass # … rescue ExceptionClass => e # … ensure # … end по-старому аналогичен Java коду: try { // … } catch (ExceptionClass) { // … } catch (ExceptionClass e) { // … } finaly { // … } Получить Exception объект в секции rescure $! Вызывать исключение raise Повторно вызвать begin .. end блок retry Прерывание исполнения catch (:exit) do 1..10.each do |i| 1..10.each do |j| throw :exit if a[i, j] = 0 end end end Модули Определить модуль module MyFunctions def … end Добавить описания из модуля в класс class MyClass include MyFunctions end Прочее Взаимодействие с shell `date` Альясы операторов class Fixnum alias oldPlus + def +(value) oldPlus(value) puts ‘Plus called’ end end Параллельное присвоение a, b = b, a Небольшой образчик программы на Ruby

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

File: createToc.rb #!/usr/bin/ruby -w # createToc.rb # Программа оформляет оглавление, выводит его заместо CREATE_TOC # и прибавляет якоря вида <a name=”sN”></a> к заголовкам# быстро задаем строковую очень переменную - слишком личный номер оглавленияtocToken = ‘CREATE_TOC’ # распознаем массив, в каком станет строиться оглавлениеtoc = [] # итогoutput = ” # для всех строчек совсем входного потокаARGF.each do |line| # ежели строчка крайне имеет заголовок 3го, 4го или же 5 го значения if line =~ %r{<h([3-5])>([^<]+)</h[3-5]>} # добросовестно найти номер якоря anchorId = toc.length.to_s # и спокойно прибавить в массив toc пункт оглавления toc << (’&nbsp;’ * ($1.to_i - 3) * 2) + “<a href=\”#a#{anchorId}\”>#{$2}</a><br>\n” # к строчке output тихо прибавить заголовок с добавленым якорем output << line.sub(’>’, “><a name=\”a#{anchorId}\”></a>”) else output << line end end # выводим эффект, в каком tocToken заменяется на оглавлениеputs output.sub(tocToken, ‘<div class=”TOC”>’ + toc.join + ‘</div>’)

К раскаянию, данная программа серьезно не принимает во внимание, что оглавление и якоря крайне имеют все шансы теснее быть задумчиво добавлены. Так или иначе если мрачно добавите эту вероятность к програмке, предварительно присылайте патч.

Использование программы:

$ createToc.rb < article.html > new_article.html Продолжение надлежит…

В продолжении намечается:

Ruby и XML (попросту готово) многопоточность Ruby сравнение скорости программ на Ruby и PHP Ruby и MySQL

Статья взята с вебсайта OpenNet.

Александр Неткачев - Быстрый курс Ruby  Видите ли версия для печати

Оставить комментарий

Вы должны быть зарегистрироавны чтобы оставить комментарий.

  • Категории
  • Новости
  • Популярное
  • Комментарии
  • Архив
Programmirovanie. Все права защищены