вторник, 31 июля 2012 г.

Using Ranges - two dots vs three dots. Две или три точки.



irb(main):001:0> letters = ('A'..'Z').to_a
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]


Преобразование строки(?) в массив. Вродь и не строка это, хз. В общем, шо-та преобразовали в массив. Написав две точки, мы вывели все буквы алфавита от А до Z, включая Z.


irb(main):001:0> numbers = (1..10).to_a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Здесь также вывели все числа, включая последнюю.


irb(main):001:0> letters = ('A'...'Z').to_a
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"]


Когда мы пишем три точки, то выводятся все элементы, не считая последнего.


irb(main):001:0> numbers = (1...10).to_a
[1, 2, 3, 4, 5, 6, 7, 8, 9]


И снова вывелись все числа, но без "10".

Имхо, как-то не очень логично. Ну, так, на интуитивном уровне мне кажется, что там, где точек больше, там и выводиться должно больше, т.е. все элементы. Но это моя интуиция. Значит, буду запоминать как-то так, как придется :)

Arrays and Strings. Массивы и строки. Метод .split.



irb(main):001:0> 'dog, cat, cow, goat, monkey'.split(', ')
["dog", "cat", "cow", "goat", "monkey"]


Изначально это была строка. Мы применили к ней метод .split + в круглых скобочках поставили одинарные кавычки, разделенные запятой - и строка превратилась в массив.
Для превращения массива в строку есть также метод .join.
В вики написано даже, что строки очень удобно преобразовывать туда и обратно. И если работа со строками обходится без преобразования в массив, то программа либо очень простая, либо бесполезная. 

воскресенье, 29 июля 2012 г.

Common array methods - removing elements: .pop, .shift, .delete_at, .delete



irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.pop
five

.pop - выстреливать. В общем, этот метод "выталкивает" последний элемент массива и выводит его. (Вот объяснение из викиучебника: Удаляет последний элемент из массива array и возвращает его. Если на момент вызова массив был пуст, то возвращает nil 
Вот такой примерчег еще:
a = [ "a", "m", "z" ]
  a.pop   #=> "z"
  a       #=> ["a", "m"]


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


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.shift
one

.shift - сдвигать. Выдает первый элемент массива.


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.delete_at(2)
three

.delete_at() - удаляет после определенного, заданного, элемента. В данном случае после второго.


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.delete('two'); array
["one", "three", "four", "five"]


.delete(' ') - удаляет определенный заданный элемент.

Common array methods - add an element, .sort, .push, .inspect, .reverse

sdf


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves << 'Crazy'
["Doc", "Sleepy", "Bashful", "Grumpy", "Happy", "Sneezy", "Dopey", "Crazy"]


Значок << добавляет еще один элемент(ы) в конец строки.


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.push('Strange')
["Doc", "Sleepy", "Bashful", "Grumpy", "Happy", "Sneezy", "Dopey", "Strange"]


.push - также добавляет элемент(ы) в конец строки. Интересно, когда предпочтительней использовать первый метод, а когда - второй.


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.sort.inspect
["Bashful", "Doc", "Dopey", "Grumpy", "Happy", "Sleepy", "Sneezy"]


.sort.inspect - ну, sort - понятно, сортирует по алфавиту. А вот шо такое inspect - хз. В вики написано, что .inspect создает "печатную" версию массива. (Печатная версия массива - это строка).


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.sort.reverse.inspect
["Sneezy", "Sleepy", "Happy", "Grumpy", "Dopey", "Doc", "Bashful"]

.reverse - переставляет элементы в обратном порядке.

суббота, 28 июля 2012 г.

Common array methods: .slice, .first, .last, .include?(''), .index, .length

Общие методы массива.

irb(main):001:0> servers = %w{alpha bravo charlie}; servers.slice(1,2)
["bravo", "charlie"]


.slice - выдало первое и второе. С учетом нулевого.


irb(main):001:0> servers = %w{alpha bravo charlie}; servers.first
alpha

. first - выдало первое.

irb(main):001:0> servers = %w{alpha bravo charlie}; servers.last
charlie

.last - выдало последнее.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.include?('Donner')
false

.include? + значение. Мы кагбэ спрашиваем, включен ли в этот список гном по имени Доннер. Интерпретатор возвращает значение "нет".

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.include?('Happy')
true

.include? + значение. То же самое. Только ответ теперь положительный.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.index('Happy')
4

.index выдает порядковый номер элемента. Здесь результат "4", т.к. 'Doc' - 0, 'Sleepy' - 1 и т.д. Т.е. отсчет идет с 0.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.length
7


.length - выдает количество элементов в массиве.

пятница, 27 июля 2012 г.

Creating arrays. Создание массивов.



irb(main):001:0> numbers=[1, 2, 3]
[1, 2, 3]

Простое создание массива из чисел.


irb(main):001:0> fruits=['apple', 'banana', 'watermelon']
["apple", "banana", "watermelon"]

Простое создание массива из слов.


irb(main):001:0> mixed_array=[1, "apple", "candy", 20.5]
[1, "apple", "candy", 20.5]

Создание массива из чисел и слов. Слова почему-то уже написаны в двойных кавычках. Интересно, это значимо или нет)


irb(main):001:0> servers = %w{alpha bravo charlie}
["alpha", "bravo", "charlie"]


%w - whitespace - т.е. вместо того, чтобы писать все с кавычками и запятыми, мы ставим значок %w и пишем массив в фигурных скобках. Выдается все то же, только немного упростили))

вторник, 24 июля 2012 г.

Dates & Times in Ruby


irb(main):001:0> t=Time.now; puts "The current month is #{t.month}"
The current month is 7



Выдает текущий месяц.


irb(main):001:0> t=Time.now; puts "The current year is #{t.year}"
The current year is 2012


Выдает текущий год.


irb(main):001:0> t=Time.now; puts "The current day is #{t.day}"
The current day is 24


Выдает текущий день.


irb(main):001:0> t=Time.now; puts "Today's date is #{t.month}/#{t.day}/#{t.year}"
Today's date is 7/24/2012


Выдает текущую дату.


irb(main):001:0> t=Time.now; puts "Epoch time is #{t.tv_sec}"
Epoch time is 1343171023

Выдает количество секунд, прошедших с начала эпохи. ( В системах Unix и Linux время отслеживается в секундах до или после начала эпохи, которое определяется как полночь 1 янв. 1970 года по UTC (Universal Coordinated Time - универсальное синхронизированное время). Положительные значения времени относятся к периоду после начала эпохи, отр. - до начала эпохи. Взято отсюда. tv - вероятно, сокращение от time value. Ыы, это я с фотега взяла.

irb(main):001:0> s = Time.now.to_a[0]; puts "The current second is #{s}";
The current second is 33


Выдает текущую секунду. .to_a расшифровывается как to array - преобразовать в массив. Не могу понять - здесь и в последующих примерах - имеет ли значение, что стоит в квадратных скобках. Почему здесь именно "0"? И что это значит))
Появилась догадка. Может быть, [0] - это секунды, [1] - это минуты, [2] - часы, [3] - по счету день в месяце и т.д. 



irb(main):001:0> m = Time.now.to_a[1]; puts "The current minute is #{m}";
The current minute is 9

Выдает текущую минуту.

irb(main):001:0> h = Time.now.to_a[2]; puts "The current hour is #{h}";
The current hour is 16


Выдает текущий час.


irb(main):001:0> d = Time.now.to_a[3]; puts "The current day of month is #{d}";
The current day of month is 24


Выдает текущее число.


irb(main):001:0> yday = Time.now.to_a[7]; print "The current day of year is #{yday}";
The current day of year is 206

Выдает текущий день в году.

понедельник, 23 июля 2012 г.

Посчитать температуру в градусах по Фаренгейту.
Найти температуру в градусах F, когда по Цельсию = 30.
Это делается по заданной формуле:


Тф = 9/5 * Тц + 32, или
Тф = 1,8 * Тц + 32, где:
Тц – количество градусов по Цельсию,
Тф – количество градусов по Фаренгейту.



f = (30 * 1.8) + 32
86.0


Заодно нашла интересный сайтец, называется "Как просто". Там понятным языком описываются всякие штуки, которые я забыла))

rand, .abs, .round, .ceil, .floor, .sqrt, PI - расшифровка

Различные методы класса numeric.


irb(main):001:0> rand(10)
8

rand - random. Случайный. Выдает случайный результат.


irb(main):001:0> (-5).abs
5

.abs - absolute. Выдает значение по модулю (абсолютное значение).


irb(main):001:0> (2.1635).round
2

round  - округление. Округляет число до ближайшего целого.


irb(main):001:0> (2.1635).ceil
3

.ceil - покрывать. Выдает наименьшее целое число, которое больше или равно num.

irb(main):001:0> (2.1635).floor
2

.floor - минимальный уровень. Возвращает наибольшее целое число, которое меньше или равно num.


irb(main):001:0> Math.sqrt(289)
17.0

sqrt - square root. Квадратный корень. Вычисляет квадратный корень.


irb(main):001:0> Math::PI * (3*3)
28.2743338823081

Math::PI -  определяет отношение длины окружности к ее диаметру, определяемое константой Пи.

Exponential Expression - возведение в степень.


irb(main):001:0> print "In IPv4, there are #{2**32} addresses"
In IPv4, there are 4294967296 addresses
irb(main):001:0> print "In IPv6, there are #{2**128} addresses"
In IPv6, there are 340282366920938463463374607431768211456 addresses


Собсна, сабж :)

Arithemetic operators


irb(main):001:0> x = 5; x += 25; x -= 5; x *= 2; x /= 5
10


x = 5, потом 5 + 25 = 30, 30 - 5 = 25, 25 * 2 = 50, 50 / 5 = 10.

Вот только почему перед этими знаками стоит равно не понятно. Т.е. понятно, что оно здесь стоит, чтобы включились в силу все эти арифметические операторы - плюсы, минусы и т.д. Наверное, если просто числа писать, можно обойтись и без =. А если переменные, то нужны знаки равно.

Попробовала без знаков "=". Интерпретатор выдает только результат последнего действия:


irb(main):001:0> x = 5; x + 25; x - 5; x * 2; x / 5
=> 1
irb(main):002:0> x = 5; x + 25; x - 5; x / 5; x * 2
=> 10




суббота, 21 июля 2012 г.

*10, .capitalize, .chop, .next, .swapcase, .upcase, .downcase, .size, .reverse

Методы :)

"hello"*10
hellohellohellohellohellohellohellohellohellohello

*10 - 10 раз выводит строку.


irb(main):001:0> "hello".capitalize
Hello

. capitalize - делает с заглавной буквы.


irb(main):001:0> "hello".chop
hell

.chop  - откидывает последнюю букву. Жизнеутверждающее, угу))


irb(main):001:0> "hello".next
hellp

.next  - в строке последнюю букву заменил следующей по алфавиту.


irb(main):001:0> "Hello".swapcase
hELLO


.swapcase (swap - менять) - меняет регистры. Там, где был нижний регистр - поставил верхний и наоборот.


"Hello World".upcase
HELLO WORLD

.upcase  - делает строку в верхнем регистре.

irb(main):001:0> "Hello World".downcase
hello world

.downcase - делает строку в нижнем регистре.

irb(main):001:0> "Hello World".size
11

.size - пишет количество символов, включая пробелы.

irb(main):001:0> "Hello World".reverse
dlroW olleH

.reverse пишет строку торобоан :)

Expanding Variables


ыва


irb(main):001:0> age = 18; puts "I am #{age} years old."
I am 18 years old.
irb(main):001:0> age = 18; str="I am " + age.to_s + " years old."
I am 18 years old.
irb(main):001:0> "I am 18 years old.".gsub(/\d+/) { 2 * $&.to_i }
I am 36 years old.


В первом примере просто вставляется переменная.
Во втором вставляется числовая переменная в строку, поэтому ее тоже делают строковой.
В последнем примере, наверное, дело обстоит так:
.gsub - это, как мы знаем, глобальная замена. В круглых скобках и в двух косых // написано что именно надо заменить, а именно - \d+. Где \d+ - это число 18. Почему именно такое написание, хз. Особенно интересно зачем там плюс. Единственное, что я поняла, что d - это число.
В фигурных скобках мы 2 умножаем на конструкцию вида $&.to_i, где $& - это указание на то, шо было в круглых скобках, т.е. на \d+, ну, и перевод в число, шоб из строковой сделать числовую.


Далее - Escaping Characters.



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/['"]/) { '\\'+$& }
Ruby said, \"Don\'t you like Ruby\"



В моем irb выдает другой результат. Странно. Там я еще пробанула поменять местами составляющие фигурных скобок. Меняется. Т. о. обратные слеши будут не перед 'и ", а после. В круглых скобках добавились еще и квадратные. Наверное, это потому, что у нас не одну штуку надо экранировать, а две. Т.е. когда пертурбации происходят с чем-то одним, то достаточно круглых скобок и слешей, а когда с несколькими составляющими, то надо их выделить еще в квадратную скобку.
Да, и здесь в фигурных скобках уже не умножение, а знак "+". Т.е. к тому, шо в круглых скобках надо прибавить, то что в фигурных. В этом примере к ' и " надо добавить "\\".
Не могу понять, почему добавляет по одному обратному слешу.
%q - тож не понимаю, почему %, ну, а q - quote, наверное, просто переменная. А, или для добавления цитаты %.



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/[^A-Z]/) { '\\'+$& }
R\u\b\y\ \s\a\i\d\,\ \"D\o\n\'\t\ \y\o\u\ \l\i\k\e\ R\u\b\y\"



В этом примере мне не очень понятно, почему нет слеша перед первой буквой. И почему нет слеша перед "D". Отута:  \"D\o\



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/\W/) { '\\'+$& }
Ruby\ said\,\ \"Don\'t\ you\ like\ Ruby\"



Здесь, наверное, W - Whitespace. Т.е. перед пустотой. Вот только почему он считает пустотой запятую и кавычки - одинарные и двойные. Может, это не пустота, а шо-та другое?)

Scan and join methods.


irb(main):001:0> ["php", "perl", "ruby", "javascript"].join
phpperlrubyjavascript



irb(main):001:0> ["php", "perl", "ruby", "javascript"].join(', ')
php, perl, ruby, javascript


Я так понимаю, обработчик сначала сканирует код на наличие языков программирования, а потом присоединяет?
А, наверное, если в коде используются другие языки, то они типа включаются в работу. Как-то так.