Реклама

Поиск

User Guide #28 - Ruby - Фишки

TutorialRubyRuby, ruby lesson, ruby уроки, user guide, руководство пользователя61

Эта глава посвящена некоторым практическим приемам.

Разделители выражений

В некоторых языках необходимо соблюдение некоторых правил пунктуации; часто используется точка с запятой ( ; ), для обозначения окончания выражения в программе.  Ruby вместо этого следует соглашениям, используемым в шеллах, таких как sh или csh .  Множественные выражения в одной строке должны разделяться точкой с запятой, но это не обязательно в конце строки; перевод строки трактуется как точка с запятой.  Если линия заканчивается обратным слэшем ( \ ), перевод строки игнорируется; это позволяет разнести длинный оператор на несколько строк.

Комментарии

Зачем писать комментарии?  Хотя хорошо написанный код имеет тенденцию к самодокументированию, часто бывает полезно делать заметки на полях; будет ошибкой думать, что другие смогут немедленно сказать что делает Ваш код лишь мельком взглянув на него (как это можете Вы). Кроме того, вы можете оказаться в роли этого другого человека всего лишь несколько дней спустя; кто из нас не возвращался спустя некоторое время к старой программе чтобы что-то дописать или исправить ее и не говорил "Я знаю, что это писал я. Но, черт побери, что вот это значит?"

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

Ruby on Rails - Генерирование ресурсов

TutorialRubyRuby, Ruby on Rails, user, web, генерирование87

После того, как удалось получить в предыдущей статье рабочий вариант веб-приложения на Ruby, пошёл разбираться дальше с разработкой и генерированием ресурсов, а также с изучением архитектуры веб-приложений Ruby on Rails. Благо данный фреймворк использует паттерн MVC, который также используется в  Qt, поэтому в целом с пониманием архитектуры проблем возникнуть не должно.

В процессе поиска источников информации в стиле "Ruby для чайников", "Ruby за 21 день" и т.д. я натолкнулся, по-видимому, на весьма замечательный ресурс , который является переводом книги Ruby on Rails Tutorial by Michael Hartl. Первое впечатление от книги оказалось положительным. Так что дальнейшее самообучение, пожалуй, буду проводить по этому ресурсу.

Из первых плюсов, которые обнаружил, так это упоминание среды разработки RubyMine от JetBrains. Я уже знаком с такими продуктами, как WebStorm, PHPStorm, Intellij IDEA и основанной на ней AndroidStudio, поэтому на данный момент остановил свой выбор на этой среде разработки. Что странно Google по запросам Ruby IDE и аналогичным, не показал информации об этой среде разработки, видимо ещё не раскрутились.

В общем полон мир открытий чудных для новичка. Ну а теперь приступим непосредственно к генерированию ресурсов, которые будут работать на основе MVC паттерна.

Реклама

User Guide #09 - Ruby - итераторы

TutorialRubyinterators, Ruby, ruby lesson, ruby уроки, user guide, итераторы, руководство пользователя69

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

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

Когда мы пишем код, мы должны работать с циклами во многих ситуациях. В C мы будем использовать for или while. Например,

char *str;
for (str = "abcdefg"; *str != '\0'; str++) {
  /* здесь идёт обработка символа */
}

User Guide #08 - Ruby - управляющие структуры

TutorialRubycase, for, Ruby, ruby lesson, ruby уроки, user guide, while, руководство пользователя64

В данной главе больше поговорим об управляющих структурах в Ruby.

case

Мы используем оператор case для проверки последовательности условий. Это действительно очень похоже на switch в C и Java, но является более мощным инструментом, как мы увидим далее.

ruby> i=8
ruby> case i
    | when 1, 2..5
    |   print "1..5\n"
    | when 6..10
    |   print "6..10\n"
    | end
6..10
   nil

User Guide #10 - Ruby - Объектно-ориентированное мышление

TutorialRubyRuby, ruby lesson, ruby уроки, user guide, ооп, руководство пользователя56

Объектно-ориентированный является очень броской фразой. Называя что-либо объектно-ориентированным, вы можете звучать весьма умно. Ruby позиционирует себя как объектно-ориентированный язык сценариев, но что на самом деле означает "объектно-ориентированный"?

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

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

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

Реклама

User Guide #12 - Ruby - классы

TutorialRubyclass, Ruby, ruby lesson, ruby уроки, user guide, класс, руководство пользователя52

Реальный мир наполнен объектами, и мы можем классифицировать их. Например, очень маленький ребёнок, вероятно, скажет "гав-гав", когда увидит собаку, независимо от породы; мы же на самом деле видим мир в терминах категорий.

В терминологии  объектно-ориентированного программирования категория объекта "dog" называется классом, и некоторые конкретные объекты принадлежащие классу называются экземплярами этого класса.

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

User Guide #11 - Ruby - методы

TutorialRubymethods, Ruby, ruby lesson, ruby уроки, user guide, методы, руководство пользователя44

Что является методом? В Объектно-ориентированном программировании мы не оперируем данными непосредственно извне, скорее объект имеет некоторое представление о том, как оперировать ими (когда его хорошо попросят). Вы можете сказать, что мы передаём сообщение в объект, и эти сообщения, как правило, выполняют некоторые действия и возвращают ответ. Это случается без нашего обязательного знания того, как объект в действительности работает внутри. Задачи, которые нам разрешено задать объекту, выполняются будучи методами объектов.

В Ruby мы вызываем метод объекта с помощью точечной нотации (как в C++ или Java). Объект, к которому обращаемся лежит слева от точки.

ruby> "abcdef".length
   6

Интуитивно понятно, что объект является строкой и её спрашивает о её длине. Технически, мы вызываем метода length у объекта "abcdef" .

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

User Guide #03 - Ruby - Простые примеры

TutorialRubyRuby, ruby lesson, ruby уроки, user guide, руководство пользователя91

Давайте напишем функцию вычисления факториалов. Математическое определение факториала от n следующее:

n! = 1                (когда n==0)
   = n * (n-1)!       (иначе)

В Ruby это может быть записано следующим образом:

def fact(n)
  if n == 0
    1
  else
    n * fact(n-1)
  end
end

Вы можете заметить, что оператор end здесь повторяется. Ruby из-за этого называют Алоголо-подобным. (На самом деле синтаксис Ruby больше походит на синтаксис языка Eiffel.) Вы можете также заметить, что отсутствует оператор return . Он не требуется поскольку Ruby возвращает последнее значение с которым вышел из функции. Использование оператора return возможно, но не обязательно.

User Guide #20 - Ruby - глобальные переменные

TutorialRubyglobal variables, Ruby, ruby lesson, ruby уроки, user guide, глобальные переменные, руководство пользователя51

Глобальные переменные имеют имя, которое начинается с символа $ . Данная переменная может быть доступна из любого места программы. Перед инициализацией глобальная переменная имеет особое значение nil.

ruby> $foo
   nil
ruby> $foo = 5
   5
ruby> $foo
   5

Глобальные переменные следует использовать с осторожностью. Они очень опасны, потому что они могут быть перезаписаны откуда угодно. Чрезмерное использование глобальных переменных может затруднить отлов багов. Это также является звоночком, что дизайн программы не был тщательно продуман. Всякий раз, когда вы используете глобальную переменную, убедитесь что даёте ей имя, которое вряд ли будет использовано где либо ещё (например, назвать глобальную переменную как $foo явно плохая идея)

User Guide #15 - Ruby - контроль доступа

TutorialRubyaccess control, Ruby, ruby lesson, ruby уроки, user guide, контроль доступа, руководство пользователя50

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

Рассмотрим, что происходит, когда мы определяем метод на верхнем уровне, не внутри определения класса. Мы можем подумать, что этот метод будет аналогичен функции в более традиционном языке, таком как C.

ruby> def square(n)
    |   n * n
    | end
   nil
ruby> square(5)
   25

Реклама

Реклама