Объекты и методы

    Ruby— Объектно- ориентированный язык.


    Как и в других Объектно— ориентированных языках, всё, с чем работает программа является объектом.
    Каждый объект является экземпляром некоторого класса и функциональность объекта определяется именно классом.
    Все объекты, которые являются экземплярами одного класса, могут выполнять одни и теже действия называемые методами.
    Для того, чтобы применить метод к объекту, достаточно, после указания объекта поставить «.» (точку), а затем указать метод

    Продолжим!

    Простейшие объекты:

    true— логическая величина, означающая истину; единственный представитель класса TrueClass;

    false— логическая величина, означающая ложь; единственный представитель класса FalseClass;

    числа— представители класса Numeric, который в качестве подклассов содержит дробные (Float) и целые числа (Integer);

    строки— представители класса String;

    nil— «ничто»; единственный представитель класса NilClass.


    Числа в Ruby



    Числа в Ruby являются экземплярами класса Integer, который объединяет в себе 2 подкласса: Fixnum и Bignum

    Так, например, число 123456 принадлежит классу Fixnum
    Причем, если записать 123_456 подчеркивание будет игнорироваться, это сделано для удобства записи больших чисел.

    Число -526 принадлежит классу Fixnum, отрицательное.

    Число 123_456_789_123_456_789 принадлежит классу Bignum
    Большое число, подчеркивания, так- же игнорируются.

    Число 0xaabb—шестнадцатеричное
    0 — для восьмеричной, 0x — для шестнадцатеричной, 0b — для двоичной

    Число 0b001_001- двоичное

    Дробные числа являются экземплярами класса Float и задаются в десятичной системе счисления, при этом для отделения дробной части используется символ «.»
    Например: 3.14

    Для вычисления арифметических выражений применяются следующие операторы:

    + «сложение»
    — «вычитание»
    * «умножение»
    / «деление»
    ** «возведение в степень»
    % «остаток от деления»


    Например:
    puts 5-3
    puts 6/8
    puts 6.0/8
    puts 8*7
    puts ((2000/10)-(4*5)+(2**3))*3


    Результат работы будет таковым:



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

    Метод to_f— преобразовать объект в экземпляр класса Float
    Метод to_i— преобразовать объект в экземпляр класса Fixnum или Bignum

    И еще пара методов:
    ceil— нахождение наименьшего целого не меньшего, чем указанное
    floor— наибольшее целое, не большее данного
    round— округление до ближайшего целого
    abs— получение абсолютной величины числа

    Далее- пример работы


    Строки в Ruby

    В Ruby за строки отвечает класс String, к этому классу относятся строки символов заключенные в кавычки, или апострофы.

    \n — переход на следующую строку
    \t — табуляция


    Выражение стоящие между «#{» и «}» заменяется на результат его вычисления.

    Например:


    Существуют следующие методы, для работы со строками:
    ««строка»+«строка»»—склеивает две строчки.

    ««строка»*n»—повторяет строку n-ное кол- во раз.

    ««строка»[позиция]», или ««строка»[позиция].chr»—Возвращает ASCII-код символа, находящегося на указанной позиции строки (отсчет начинается с нуля)

    ««строка»[0..3]»—Возвращает подстроку, заключенную в указанном диапазоне (считая концы)

    ««строка»[0,3]»—Возвращает подстроку, начинающуюся с указанной позиции и имеющую заданную длину

    ««строка».capitalize»—Заменяет первый символ строки (если он является буквой латинского алфавита) на заглавную

    ««строка».chop»—Удаляет последний символ строки (два символа, если они есть "\r\n")

    ««строка».delete('ea')»—Удаляет указанные символы из строки, может указываться диапазон изменения символов

    ««строка».index(«cd»)», или ««строка».index(«cd»,3)»;—Определяет номер позиции, с которой начинается указанная подстрока; можно указывать номер позиции, с которой начинается поиск

    ««строка».length», или ««строка».size»—Определяют длину строки (в байтах)

    ««строка».ljust(8)»,««строка».rjust(8)»,««строка».center(8)»—Дополняют строку пробелами до указанной ширины, выравнивая соответственно по левому краю, по правому краю или по центру

    ««строка».reverse»—Возвращает строку, содержащую символы в обратном порядке

    ««строка».strip»—Удаляет пробелы в начале и конце строки

    ««строка».squeeze»,««строка».squeeze('*-')»—Оставляет в группе повторяющихся символов только один; допускается задание списка символов, на которых распространяется данное действие

    ««строка».tr('25','47')»—Заменяет все найденные вхождения символов на заданные


    Например:

    puts «Коро»+«вкин» #Коровкин
    puts «12345678».size # 8


    Продолжение следует.

    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 67

      0
      супер +1 ,продолжайте в том же духе.
      Кстати а где можно посмотреть уже готовые коды на Ruby(примеры)?
      0
      Мне нравится стиль, только если можно, поскорее перейти к взаимодействию с MySql ;)
        0
        Хихихи... и до кучи к каким-нибудь AJAX фрэймворкам? :))
          –1
          конечно ) конечный парсинг в html и т.п. ) не консольные же приложения писать, а для веб ;)
            0
            Парсинг В HTML? Это как, простите? Парсят обычно что-то, а не во что-то...
              0
              просто не то слово применил)) вывод в браузер в виде html кода) хотя я уже разобрался в данном вопросе))
              • НЛО прилетело и опубликовало эту надпись здесь
        +2
        Все как надо :) Только я думаю необходимо введение по установке и настройке + редакторы.
          0
          Кстати да, не повредит
            0
            по себе сужу.
            0
            В винде установка делается в 2 клика. Ничего сложного нет.
            Для разработки есть IDE RadRails на базе Eclipse
              0
              Я тоже самое могу сказать о PHP.
              В любом случае надо описать. Особенно, как подключить к апачу.
                0
                Апач - это уже относится к ROR. Пока никто про рельсы не заикался, разговор идет исключительно про Руби.
                –1
                по мо про RadRails можно забыть. Он основан на RDT, а не него забили похоже.
                vim, emacs, textmate, eclipse dltk, netbeans , idea + ruby plugin - это сейчас модно :)
                  0
                  Комодо 4.1 поддерживает Рельсы.
                  Забудьте про тормозные клоны иклипса ( idea и иже с ними )
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Да мне пока хватает vim'а :) Но вообще идея поставить винду чтобы получить power unix under fingerprint интересна ;)
                      • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  соглашусь!
                    0
                    Поддерживаю. В качестве отдельной статьи неплохо было бы сделать небольшой обзор/инструкцию по установке наиболее распространенных средств разработки для Ruby (RadRails, InstantRails). Очень неплохой материал на эту тему есть в книге Agile Web Development With Rails (глава 3).
                      0
                      я использую Net Beans, доволнен как слон. Вот блог разработчика. У ленивого идиота можно почитать небольшой обзор IDE для Ruby и RoR
                      0
                      Ну да, уже лучше… Объекты Ruby напоминают C#. Интересный подход к дроблению чисел, в других языках такого нет… Кстати, в Ruby типы свободно конвертируются (как напр. в PHP)?
                        0
                        очевидно, да...
                        но вот этот прикол с подчеркиванием в числах мне понравился :)
                          0
                          Заимствовано из Perl.
                          Больше вроде бы нигде не встречается (хоть и очень удобно), поправьте, если не прав.
                          0
                          да.
                          методы типа: .to_i (int), to_s (string), и т.д
                            0
                            А какие-нибудь Notice при неявном преобразовании типа имеются? интересно как будет работать puts 3 + "3 поросенка" ? В PHP например 3 + "3 поросенка" = 6 :)
                            • НЛО прилетело и опубликовало эту надпись здесь
                          • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            http://avaxhome.org/ - на Ruby написан...
                              0
                              не асилил "строка".squeeze
                              а вообще интересно
                                0
                                irb(main):007:0> "aabccddd".squeeze
                                => "abcd"
                                irb(main):008:0> "aabccddd".squeeze("a")
                                => "abccddd"
                                irb(main):009:0> "aabccddd".squeeze("a-c")
                                => "abcddd"
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    спасибо
                                  0
                                  ооо! опять продолжение! Вот круто!
                                    0
                                    В руби даже вот такое работает:
                                    a = if 5 > 6
                                    7
                                    else
                                    puts "hi"
                                    end
                                      0
                                      Ужасно, и по вашему это проще и понятней чем запись в следующем виде?

                                      if (5 > 6)
                                      {
                                            a = 7
                                      }
                                      else
                                      {
                                            puts "hi"
                                      }
                                        0
                                        Это не для таких конструкций, а для чего-то типа
                                        order = get_latest_order if current_order.is_expired
                                          0
                                          а если добавить else то получится очень длинная и неудобочитаемая строка, имхо :)
                                            0
                                            ну никто же не заставляет вас всегда использовать такую нотацию )
                                            Я просто хотел показать, что иногда такая конструкция позволяет получить вполне читаемые предложение почти на естественном языке и это есть гуд.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                да я знаю. Я просо не пишу сейчас на руби постоянно, а явовские привычки неискоренимы :)
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                          –6
                                          этот язык для меня умер начиная со строки "Ру
                                            0
                                            Ага, а by - надо понимать, Белоруссия? И главное, язык создан японцем. Как интересно. Русский и японец - братья навек?
                                            0
                                            Схему надо было поменьше сделать, а то очень уж большая :))))
                                              –1
                                              отлично.. очень удобочитабельно.. спасибо
                                                0
                                                За первую часть не поставил плюс, т.к. показалась очень уж урезанной. За эту ставлю большой плюс :)
                                                  0
                                                  И еще один вопрос интересует - а программы на руби вообще компилируются в исполняемый код (под windows, например)?
                                                    +1
                                                    http://exerb.sourceforge.jp/index.en.html
                                                    0
                                                    =) неплохо
                                                      0
                                                      а можно написать линк или дать ссылку на тему отличий от C++/Java?

                                                      Базовый синтаксис он меня как то честно говоря не сильно волнует, а вот услышать пару строк про интерпретатор и особенности языка было бы интересно.
                                                        0
                                                        Например в эту статью можно было бы включить пример того как сравниваются строки в Ruby. Напимер в Java это делается не совсем тривиально (возможно из-за строгой типизации):

                                                        String a = "test";
                                                        String b = "test";

                                                        Выражение a == b - обращается в false
                                                        Выражение a.equals(b) - обращается в true

                                                        а как в Ruby?
                                                          0
                                                          Примеры простейших программ, я разберу в одной из следующих статей, терпение.
                                                            0
                                                            a == b
                                                            a.eql? b

                                                            Кому как привычнее, результат один и тот же.
                                                              0
                                                              Далеко не всегда Попробуйте
                                                              a = 5
                                                              b = 5.0
                                                              a == b //true
                                                              a.eql? b //false
                                                                0
                                                                Вопрос был про строки :)
                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                            0
                                                            Схема наверху очень мелкая. Неплохо бы сделать её кликабельной, чтобы открывался увеличенный вариант (Хабр сжимает картинки до 450 пикселей). И ещё небольшой комментарий по поводу кода: фрагметны типа «"строка"+"строка"» выглядят очень громоздко. Гораздо лучше оформлять их с помощью тегов <code>. Тогда сразу станет понятно, что текст - не просто текст, а пример кода. В целом, хорошая статья, спасибо.
                                                              0
                                                              Спасибо
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  Хорошая мысль. Для этого во-первых понадобится внедрить некий микроформат, с помощью которого можно определять нужный тип подсветки для кода, заключенного в HTML контейнер. Например, добавив в контейнеры <code> и <pre> атрибут lang (этот атрибут, естесственно должен будет вырезаться Хабром после публикации постов и комментариев).

                                                                  В итоге, например, тег <pre lang="Ruby"> означал бы, что в содержимое контейнера требуется раскрасить в соответствии с синтаксисом Руби. Идеальным вариантом, конечно, было бы автоматическое определение языка, но это довольно сложная задача.

                                                                  Во-вторых, понадобится наваять упомянутый вами SyntaxHighlighter.js. Хотя на мой взгляд, это задача совсем не для JS и разумнее расцветку выполнять на серверной стороне с помощью Perl скрипта. Или не Perl-скрипта, а программы на том языке, на котором написан Хабр (интересно, на чем, кстати?)).

                                                                  Такой скрипт должен будет разобрать код в примере соответствующим языку tokenizer-ом, добавить в него <span> контейнеры с указанием нужных CSS-классов и удалить нестандартный для HTML атрибут lang.

                                                                  В общих чертах я примерно так себе представляю это решение.. Можно предложить в "Идеях".
                                                                0
                                                                Раз Ruby будет теснить Perl на чём же будет сидеть Futurico? :-)
                                                                P.S. Мне показалось, что habrahabr ночью завис — ошибка 500 =(
                                                                  0
                                                                  Чтобы совсем вытеснить Перл, понадобится очень много времени (годы). Потому что чем старше технология, тем больше существует высококвалифицированных специалистов с опытом, которые с ней работают. И тем больше проверенных временем систем, которые на ней (технологии) базируются. А для того, чтобы эти специалисты взяли и разом отказались от своего надежного способа зарабатывания денег, просто появлений новой прогрессивной технологии мало. Миграция программеров с языка на язык - очень медленный эволюционный процесс. Подтверждением тому может быть, напрмиер, наличие сейчас программистов на Коболе (сам не видел, но говорят, они правда есть).

                                                                  Так что в Futurico вряд ли сильно волнуются на эту тему (:

                                                                  2All: Я ничего не имею против Ruby точно так же, как и против Perl, поэтому любителям религиозных войн просьба не волноваться (:
                                                                  0
                                                                  Не понял зачем переписывать уже написанные статьи в wiki ruby lang в хабр, если столько желания то лучше дописать там недостоющие и полезные вещи.
                                                                    0
                                                                    быть может, по целым числам кому то будет полезно прочитать мой перевод http://wpm1.habrahabr.ru/blog/41032.html

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

                                                                    Самое читаемое