Beginner’ Руководство для Руби

Рубин является объектно-ориентированным языком.Что это вообще значит?Она имеет уникальные особенности и характеристики, которые мы будем четко объяснить.Эта статья предполагает, что у вас нет опыта программирования, даже не HTML.

Важным навыком, чтобы при создании программы перевода — переводя желания пользователя в выходные они ищут.Для того, чтобы сделать это, вы должны быть в состоянии думать, как разработчик, так что вы можете взять то, что вы знаете, инстинктивно (как пользователь) и морфинг он в то, что компьютер должен быть в состоянии делать то, что вы хотите.Таким образом, мы поможем вам начать думать, как разработчик.Когда вы закончите, вы должны иметь мысленную модель того, как Руби работ и быть на вашем пути, чтобы стать успешным Rubyista.

Мы возьмем вас через различные фундаментальные элементы языка Ruby, и объяснить Whys за hows.

Для всех образцов кода переходе, вы можете проверить их на Попробуйте Ruby (без необходимости устанавливать что-либо на вашем компьютере).Вы можете следить Попробуйте учебник Руби, если вы хотите, но вам не нужно для того, чтобы понять, что мы опишу ниже.Это просто быстрый способ получить ваши ноги мокрые без головной боли установить anything.

Как ваш код оцениваются компьютером

Переводчик для Руби — основном, основной мозг язык программирования, который имеет смысл написанного вами кода — считывает код сверху вниз и слева направо, это означает, она начинается в строке 1, символ 1,буквально, и сначала читает по линии от 1 до последней буквы, затем идет вниз к следующей линии, и повторяет этот процесс, пока не достигнет последней строки вашей программы.Если у вас есть синтаксические ошибки — т.е. ошибки в коде, такие как неправильно имена переменных, неправильное использование констант (мы доберемся до константы в бит) и т.д. — она будет остановить выполнение и показать вам сообщение об ошибке, как правило, с линией число, соответствующее коду.Вспоминая это важно, потому что если вы сталкиваетесь сообщение об ошибке при кодировании, то вам нужно знать, как ее расшифровать.Выяснить это не всегда просто для beginners.

Фиктивные кода из матрицы.(Изображение: Абсолютная Chaos)

Это сверху вниз разбора также влияет на управление потоком логики в вашей программе.Допустим, вы хотите рассчитать баланс счета кто-то, прежде чем показывать им это.Вы должны убедиться, что вы положили метод и функция, которая делает расчет перед выходом из баланса, то есть, если Вывывода баланса в строке 10, то вы должны были бы сделать расчеты где-то между линией 1 и 9.Мы будем погружаться в эту later.

Objects

Объект является вещью.Он находится в самом сердце Ruby.Возвращаясь к нашему ранее заявление о Руби быть объектно-ориентированным языком, это означает, что Руби управляет всеми данными на предположении, что данные объекта.Есть много объектно-ориентированных языков, но очень немногие ввести объект в центр своей вселенной, как рубин делает.В Ruby все является объектом.Я имею в виду все: каждая переменная, каждая операция.Каждый объект имеет различные характеристики, то, что делает их разными.Строка это объект, который имеет встроенный характеристиками, которые делают его пригодным для работы с текстом.Для более техническое определение, проверить статью “ Object” на Wikipedia.

Methods

Метод является просто определением действий, которые могут быть выполнены на объекте.Рубин имеет встроенный определения объектов и методов.Одним из таких методов является capitalize для класса Рубин strings. (Мы погрузимся в строках ниже)

string1 = "this string is awesome"

Если вы написали string1.capitalize, результат будет выглядеть примерно так:

"This string is awesome".

Все, что capitalize метод говорит Руби переводчика сделать, это преобразовать первый символ строки из нижнего регистра в верхний регистр. Оплата example непосредственно с Руби документации. Как вы можете see из документации, string объекта в Ruby, имеет массу методов, которые можно использовать прямо из box.

Другая вещь, которую вы должны были заметить, это способ вызвать метод, string1.capitalize, которая в основном <object name> . <method name>.

В этом случае объект является строкой переменной.Если вы пытались сделать capitalize на объект, который не является строкой, Ruby бы бросить error.

Вы можете создать любой метод для любого из ваших объектов.Вот как это сделать:

def method_name
     #Enter code here
end

# основном говорит Руби переводчика, что это комментарий для другого человека и игнорировать его.Таким образом, интерпретатор Ruby, пропускает строки, начинающиеся с #.

Classes

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

  • То, что вы связаны в некотором роде (в большинстве случаев это родители детей, дедушка или бабушка с внуками);
  • ., Что либо вы получаете кучу вещей (земля, деньги и т.д.) или вы получили некоторые биологические атрибутов (например, форму носа или типа волос)

Классы похожи на план объекта.(Изображение: Тодд Ehlers)

Эти принципы являются одинаковыми в Ruby.Есть родители, бабушки и дедушки и дети классы.Как правило, дети классы наследуют все атрибуты одного из родителей или прародителей class.

В Ruby, бабушки и дедушки класс объекта известен, как его “суперкласс”. Другими словами, если у вас есть объект, который представляет собой строку — означает, что ваш объект наследует свойства String класса — то родительКласс String составляет String ‘S суперкласса.Будьте осторожны, чтобы не пропустить важное различие здесь: суперкласса String (который является классом, который говорит Руби, как относиться к strings) является not же, как суперкласс String объект.Вот демонстрация:

> num1 = "this­ is a strin­g"
=> "this is a string"
> num1.class
=> String
> String.sup­erclass
=> Object
> Object.superclass
=> BasicObject
> BasicObjec­t.supercla­ss
=> nil

Что мы сделали, это установить локальные переменные num1 быть строкой.Когда мы проверяем класса num1, позвонив по телефону .class метод, он говорит нам, что класс num1 составляет String.Потом, когда мы проверили суперкласса String, это говорит нам Object, и так on.

Посмотрите, что произойдет, если мы пытались num1.superclass:

> num1 = "this­ is a strin­g"
=> "this is a string"
> num1.super­class
=> #<NoMethodError: undefined method `superclass' for "this is a string":String>

Причинам это не работает потому, что num1 является объектом (локальные переменные), который унаследовал свойства класса Stringnum1 является not класса, поэтому она не имеет superclass.

Вот еще один способ делать то, что мы делали раньше:

> num1 = "this­ is a strin­g"
=> "this is a string"
> num1.class
=> String
> num1.class­.superclas­s
=> Object
> num1.class.superclas­s.supercla­ss
=> BasicObject
> num1.class­.superclas­s.superclass.supercl­ass
=> nil

Причиной последнего значения nil потому, что BasicObject не имеет родителя.Он наследует ничего из другого класса, поэтому он останавливается there.

Одним из ключевых вещь, которую мы сделали здесь, который отличается от ранее это у нас есть “прикован” методами, то есть мы продолжали применение метода текущего оператора.Это еще одна красивая вещь о Ruby: каждый раз, когда он оценивает то, что возвращает копию и позволяет продолжить оценку it.

Возьмите последнюю строку:

> num1.class­.superclas­s.supercla­ss.supercl­ass
=> nil

В принципе, Руби сделала это:

  • Что такое класс num1?Это строка, поэтому вернуть String.
  • Что такое суперкласса String?String является дочерним классом Object, так что вернуть Object.
  • Что такое суперкласса Object?Object является дочерним классом BasicObject, так что вернуть BasicObject.
  • Что такое суперкласса BasicObject?BasicObject не является дочерним классом ничего, так что вернуть nil.

Все на одной линии, все в одной команде.Простой, аккуратный, elegant.

Структура классов и суперклассов является иерархия классов inheritance.

Сейчас вопрос в том, как вы определяете класс и использовать?Рад, что вы asked.

class MyClass
# some code logic
end

Это it.

В принципе, вы просто должны открытия ключевое слово, class, за которым следуют имя класса (MyClass, в данном случае).Тогда у вас есть некоторый код.А когда вы закончите, вы закрываете его с ключевым словом end.Убедитесь, что class иend всегда в нижнем регистре (т.е. не писать Class или End или вы можете получить ошибок).

Вот и все, что нужно it.

Если у вас есть родительский класс, который вы хотите этого нового класса, чтобы наследовать вещи из, вы должны определить это так:

class MyChildClass < MyClass
# some code that is specific to the child class
end

Рубин интерпретирует <. Оператор в виду, что имя класса на правой стороне материнской компании и имя класса слева ребенка (следовательно, ребенок должен наследовать методы и такие из родителей)

Кроме того, помните, что имена классов обычно начинаются с заглавной буквы, и если их название содержит несколько слов, вы делаете то, что называется “CamelCasing” — т.е. вместо пробела или подчеркивания или дефис, вы только начинаете новое словос заглавной letter.

Класс Instances

Теперь мы знаем, как создать класс, который мы знаем, это проект типа объекта.Итак, если вы думаете, выпечки, класс как рецепт (который содержит список ингредиентов и инструкции для создания чего-то).Но как только вы создаете что-то — сказать, сдобы черники — то каждая булочка может считаться «экземпляр», что class.

Таким образом, каждый экземпляр или булочку является object.

Способ создания экземпляра, как это:

muffin = BlueberryMuffin.new

Это it.

Чтобы быть техническими, только часть заявления выше, что на самом деле создает экземпляр BlueberryMuffin класса составляет BlueberryMuffin.new.Для того, чтобы использовать объект, вы должны хранить его где-то, поэтому мы сохранили его в локальной переменной muffin. Так что мы можем использовать этот конкретный экземпляр (или булочки)

Вам нужно будет делать больше вещей с техническими класса, как создать метод инициализации, так что всякий раз, когда вы создаете объект класса, Ruby знает, как это сделать точно.Это немного выходит за рамки этой статьи — просто понять, что такое класс, как он относится к объектам, как создавать новые объекты, etc.

Читать на классы, обратитесь к статье о них Обучение на Ruby, жесткий Way.

Data Structures

Как это данные структурированы

В основе программирования является манипулирование данными.Компьютер ученые придумали способ манипулирования данными в структурированном виде, изобретая вещи называют «структуры данных». Структуры данных, это просто контейнер для определенного типа данных.Слова обрабатываются иначе, чем формулы, то же самое, символов и букв обрабатываются иначе, чем номера — В большинстве cases.

Variables

? Что такое переменная

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

Скажем, выхотел создать программу (или части программы), которая отвечает за добавление двух чисел.С точки зрения кодера зрения, вам нужно будет создать контейнер для каждого из этих чисел, а затем создать математическую функцию между контейнерами.Причина этого в том, что вы не хотите, чтобы пользователю придется изменить исходный код каждый раз, когда они хотят, чтобы вычислить сумму.Хотя вы могли бы сделать, что решение не является ни практичным, ни эффективным.Большинство пользователей знает, что такое калькулятор выглядит, таким образом, они могут просто нажимать на кнопки или введите номера.Но редактирования исходного кода нет-no.

В Ruby, каждый из этих контейнеров является переменной.Таким образом, вы могли бы сделать что-то вроде этого:

sum = num1 + num2

В противоположность что-то вроде этого:

sum = 19 + 20

Рубин и многих других языках есть много типов переменных.Мы пойдем всего за несколько быть кратким и не путайте вы тоже much.

  • LocalЭто переменная, которая может быть использована только в конечной части программы, такие, как метод или функцию (мы пойдем по тому, что они позже).После того как вы вышли из той части программы, эти переменные будут уничтожены.На самом деле, у вас есть программа, которая имеет три метода, вы могли бы иметь такую ​​же переменную — скажем, num1 —, который используется тремя различными способами в каждой из этих методов и в котором хранятся три разных значения.Возвращаясь к диаграмме Венна, предположим, что есть три формы в диаграмме: Круг 1, Круг 2, площадь.Предположим также, что круг 1 и Circle 2 не связаны, но оба находятся в пределах площади.Локальной переменной будет ограничена с соответствующим кругом и не сможет повлиять на что-либо за пределами своего круга.Способ использовать эти переменные, чтобы просто использовать их.Если вы хотите использовать локальную переменную sum которой хранится сумма значений num1 и num2, вы бы просто написать sum = num1 + num2.
  • GlobalЭто переменные, которые можно использовать на протяжении всей программы.Вернуться к диаграмме Венна, эти переменные были бы в квадрат.Таким образом, если вы находитесь внутри любого из кругов, которые находятся в пределах площади, вы можете получить доступ к переменной, которая находится за пределами кругов, но в пределах площади.Вы можете использовать эти в Рубине, положив $ перед именем.Итак, предположим, вы хотите рассчитать различные аспекты круга, и вы хотите, чтобы определить радиус заранее.Вы бы сделать что-то вроде этого: $radius = 20.Тогда, в любое другое время в течение всей программы, независимо от того, находитесь ли вы в subcircle на площадь или на площадь в одиночку, вы можете ссылаться на $radius.Теперь, используя глобальные переменные имеет хорошие стороны, и плохие стороны.Хорошая сторона в том, что вы можете прочитать значения глобальной переменной в любой метод или функцию в вашей программе.Плохая сторона в том, что вы также можете написать в глобальной переменной в любой метод или функцию в вашей программе.Если вы измените значение, забывая, что другой метод или функция зависит от предыдущего значения может действительно винтвещи.Как правило, то, остаться в стороне от глобальных переменных, если вы уверены, что вы знаете, где они будут использоваться и как изменения повлияют на остальную часть program.
  • ConstantsЭти “священные” глобальных переменных.Значения этих переменных supposed оставаться постоянным для жизни вашей программы.Скажем, вы хотели, чтобы указать математическая константа, таких как пи, что вы можете легко использовать на протяжении всей вашей программы.Вы бы сделать что-то вроде этого: PI = 3.14.Константы должны начинаться с заглавной буквы, и чаще всего они являются заглавными буквами, но они не должны быть.Обратите внимание, что я сказал, что значения константы supposed являются постоянными на протяжении всей программы, но они могут быть изменены.Руби не запрещает вам изменять значения, но когда вы делаете, это дает вам предупреждение, потому что он не нравится.Возвращаясь к диаграмме Венна, думаю PI как создаются за пределами площади, и он может быть использован в любом месте на площади и в любом месте внутри кругов в square.
  • ClassЭти переменные, чьи возможности ограничены в классе, что они определяются дюйма класса переменные определены с @@ В начале названия variable.
  • InstanceЭто переменные, область действия которых ограничивается одним конкретным экземпляром класса.Они определены с @ В начале названия variable.

Вот резюме о том, как использовать переменную типа:

  • Localsum = num1 + num2Имена локальных переменных должны начинаться со строчной буквы или underscore.
  • Global$radius = 20Глобальные имена переменных должны начинаться с $.
  • ConstantsPI = 3.14Константы должны начинаться с заглавной буквы, но они, как правило, написаны в полном caps.
  • Class@@length = 10 #Это означает длину стороны объекта в классе.Я использовал мнимое класс, называемый Square, и определил длину каждой стороны для демонстрационных целей.Что важно здесь отметить, что все «квадратов» придется «длина» 10 по default.
  • Instance@length = 5 #Это означает длину стороны конкретного объекта.Предположим, вы хотите создать красный квадрат, который имел длину 5 вместо стандартного 10.Вы можете использовать эту переменную экземпляра, чтобы указать длину данной площади, ваша “Красная площадь”.

Обратите внимание, что эти правила отнюдь не являются исчерпывающими.Некоторые слова, которые вы не можете использовать в качестве имен переменных.Они называются “зарезервированными словами”, которые Руби использует внутренне, чтобы идентифицировать различные элементы language.

Чтобы узнать больше о переменных и другим делать, а чего нельзя, проверить следующие ресурсы:

Strings

Что такое строка ?

Строка представляет собой ряд или последовательность символов — т.е. “слово” или последовательность слов.Можно сказать, что приговор, а строка это не просто предложение.Например:

string1 = 'a'
string2 = 'This is a string'

Две вещи здесь происходит.Первое, что мы используем локальные переменные, а второе дело в том, что мы используем одинарные кавычки, чтобы определить содержимое переменной.Даже если string1 содержит только одну букву, он по-прежнему строку, поскольку он объявлен в одинарные кавычки.Руби знает, как обращаться с переменной по тому, как она была объявлена.Вы можете использовать двойные кавычки, но вы должны быть последовательны.Вы не можете создать декларацию строка с двойные кавычки, а в конце одинарные кавычки, вот так: string1 = "This is a string'.Но вы можете сделать это: string1 = "This is a string" или string2 = 'This too is a string'.Оба являются действительными, и это только вопрос taste.

num1 = 9

Это наборы num1 в числовое значение 9.Так что, если вы сделали num1 + 1, результат был бы 10.

Но если вы использовали одинарные кавычки 9, как это …

num1 = '9'

… То, что бы сказать, что 9 фактически является строка, а не число.Итак, если вы написали num1 + 1, то бросил бы ошибкой вдоль линии: => #<TypeError: can’t convert Fixnum into String>.Интерпретатор Ruby, в основном говорят, что вы дали ей номер и строка, и что он не знает, как добавить them.

Принять, что на один шаг дальше, если вы сделали это …

num1 = '9'
num2 = '1'
num1 + num2

… Результат будет таким:

"91"

Потому что Руби бы две строки и буквально раздавить их вместе.Если указать значение в кавычки (одинарные и двойные кавычки), вы говорите Рубин переводчика: «Не перевести это.Просто возьмите точное содержание между началом и концом котировки “Это относится к 9., Как и любое другое письмо.Так, насколько Рубин обеспокоен …

num1 = '9'

… Более или менее так же, как это:

num2 = 'a'

В самом деле, если вы сделали num1 + num2, то результат был бы 9a.

Таким образом, строка это просто сочетание букв, цифр и специальных characters.

Collections

До сих пор мы рассмотрели отдельные элементы данных, такими как один или несколько элементов, которые могут храниться в локальной переменной, или один объект, созданный как пример class.

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

Рубин дает нам два инструмента: хэшей и arrays.

Arrays

Самый простой способ объяснить массив, чтобы показать, что образ «типичного» выглядит like.

Вместо того, шесть различных переменных для шести видов пищи, у нас есть только один продукт массив, который хранит каждый пищевой продукт в собственном контейнере или элемента.Цифры справа от диаграммы выше “индекс” или “ключи” (т.е. адреса) каждого элемента ([0] = chicken [1] = rice т.д.).Обратите внимание, что ключи всегда целые числа (целые числа), и всегда начинаются с 0 и идти оттуда.Итак, первый элемент всегда [0], и [1] Всегда второго элемента и т.д. Таким образом, вы будете знать, что диапазон ключей любого массива всегда [0] до (length-1) — означает, чтоПоследний элемент всегда является общей длине массива минус 1, потому что мы начали на [0].

Для создания выше в Ruby, мы хотели бы сделать что-то вроде этого:

food = ['chicken', 'rice', 'steak', 'fish', 'shrimp', 'beef']
=> ['chicken', 'rice', 'steak', 'fish', 'shrimp', 'beef']
> food.count
=> 6

Обратите внимание, что для каждого элемента, мы используем одинарные кавычки (мы могли бы использовать двойные кавычки вместо этого), потому что мы храним строки в каждом элементе.Руби array класс имеет несколько методов, которые можно использовать прямо из коробки, например, count, используемый выше.Это просто подсчитывает общее число элементов в массиве и выходы этого значения.Таким образом, хотя индекс идет вверх до 5, есть 6 элементов, так как индекс начал в 0.

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

> food[0]
=> "chicken"
> food[1]
=> "rice"
> food[2]
=> "steak"
> food[6]
=> nil

Причине мы получаем nil на food[6] потому, что нет [6] — или, вернее, ничего не сохраняется в food[6], так что Руби автоматически устанавливает food[6] food[7] food[8]и так далее до nil.Чтобы добавить другой пищевой продукт в этом массиве, все, что вам нужно сделать, это установить следующий элемент к тому, что значение, которое вы …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.