Лекции по языку Ruby [Автор неизвестен] (pdf) читать постранично

-  Лекции по языку Ruby  785 Кб, 40с. скачать: (pdf) - (pdf+fbd)  читать: (полностью) - (постранично) - Автор неизвестен

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Функции в языке программирования Ruby

Декомпозиция алгоритма
Если из алгоритма, реализующего сложную задачу, выделить несколько более простых
«вспомогательных» алгоритмов, то исходный алгоритм будет являться комбинацией этих вспомогательных алгоритмов.
Метод как способ реализации вспомогательного алгоритма
Методы, наряду с переменными и операторами, являются основными строительными блоками в Ruby. Вспомогательные методы называют также функциями или подпрограммами.
Математическая аналогия
Функция — это четверка:
имя, откуда, куда, как.
f :X→Y
Тело функции
(правило вычисления)
f (x) = x + 2
Вызов функции
f (5)
1 def f(x)
2
x+2
3 end
4
5

puts f(5)
7

Вызов метода
Метод должен быть определен до своего использования!
Каждый метод возвращает значение. Это результат последней выполненной операции или
выражение, следующее за словом return.
Имя метода
Имя метода должно начинаться со строчной латинской буквы (от a до z). Называйте функции «говорящими» (осмысленными) именами.
Если имя состоит из нескольких слов, то их разделяют символом подчеркивания, или каждое слово, начиная со второго, выделяют заглавной буквой.
1

Метод без аргументов
def имя_метода
...
тело_метода
...
end
Пример
1
2
3

def helloWorld # имя метода
puts "Hello, World!" # тело метода
end

4
5

helloWorld # вызов метода
Hello, World!

Метод с параметрами
def имя_метода(арг1, арг2, ...)
...
тело_метода
...
end
Пример
1
2
3

def saySomething(text)
puts text
end

4
5
6

saySomething("Hello, World!")
saySomething("Привет, мир!")
Hello, World!
Привет, мир!

Вызов private метода
Методам, определяемым вне тела того или иного класса, присваивается специальная пометка private (частный), называемая спецификатором доступа. При обращении к такому методу
используется функциональная форма, а не оператор вызова метода . (точка).
Вызов public метода
Методы, определенные внутри тела класса, по умолчанию помечаются как public. При вызове методов, определенных таким образом, используется «точечная» форма вызова метода.
2

Вызов метода
Так как наши программы пока не содержат определений новых классов, то для всех методов, разработанных нами, используется функциональный стиль вызова (аналогично sin, sqrt
и т. п.).
Параметры метода
Параметры метода являются локальными переменными. Это означает, что метод оперирует копиями переменных, переданных ему (часто говорят, что параметры передаются по
значению).
Пример
1
2
3
4
5
6
7

1
2
3

def printOneMoreThan(x)
x += 1
puts "Во время выполнения: #{x}"
end
x = 1; puts "До: #{x}"
printOneMoreThan(x)
puts "После: #{x}"
До: 1
Во время выполнения: 2
После: 1

Параметры по умолчанию
Параметры по умолчанию, дают возможность вызова метода без обязательного указания
значения всех параметров.
Метод с параметрами, заданными по умолчанию
1
2
3
4
5

def имя_метода(арг1 = знач1, арг2 = знач2, ...)
...
тело_метода
...
end

Пример
1
2
3
4
5
6
7

def saySomething(text = ’Hello, World!’)
puts text
end
saySomething
saySomething()
saySomething "Пробел между именем и аргументами"
saySomething(" или использование скобок")

3

1
2
3
4

Hello, World!
Hello, World!
Пробел между именем и аргументами
или использование скобок

Вызов метода с аргументами
Рекомендуется всегда заключать аргументы метода в круглые скобки. Это позволит избежать некоторых ошибок и недоразумений. Общепринятыми исключениями являются методы
печати — puts, print и т. д., хотя и при их вызове аргументы полезно заключать в скобки.
О методах, получающих массив в качестве параметра
Массив — это набор ССЫЛОК на некоторые элементы (их адресов в памяти компьютера).
При передаче массива-параметра он копируется аналогично другим объектам (но копируются
при этом ссылки!)
Операция [ ]= осуществляет переход по ссылке к соответствующей ячейки памяти и изменяет её содержимое. Следовательно, меняется и сам исходный массив.
Функция, изменяющая массив
1 def modify(ar)
2
for i in 0 ... ar.size
3
ar[i] = ar[i]∗2
4
end
5
return ar
6 end
7 a = [1, 2, 3, 4]
8 puts "Массив до вызова функции modify"
9 p a
10 puts "Вызвали функцию modify"
11 p modify(a)
12 puts "Массив после вызова функции modify"
13 p a
1
2
3
4
5
6

Массив до вызова функции modify
[1, 2, 3, 4]
Вызвали функцию modify
[2, 4, 6, 8]
Массив после вызова функции modify
[2, 4, 6, 8]

Функция,
не изменяющая массив
1 def dont_modify(ar)
2
arNew = ar.clone
3
for i in 0 ... arNew.size
4
arNew[i] = arNew[i]∗2

4

5
6
7
8
9
10
11
12
13
14

1
2
3
4
5
6

end
return arNew
end
a = [1, 2, 3, 4]
puts "До вызова функции"
pa
puts "Вызвали функцию"
p dont_modify(a)
puts "Исходный массив не изменился!"
pa
До вызова функции
[1, 2, 3, 4]
Вызвали функцию
[2, 4, 6, 8]
Исходный массив не изменился!
[1, 2, 3, 4]

5

Глава 1

Комплексные числа в языке
программирования Ruby
§ 1.

Реализация на базе массива из двух элементов

Создание комплексного числа
Как известно, любому комплексному числу