Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 - Лекция6_Функции.docx
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
64.01 Кб
Скачать

Int indexOf(int element) {

for (int i=0; i<n; i++) {

if (numbers[i]==element) {

return i;

}

}

return -1;

}

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

Правильное проектирование функций

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

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

for (int i=0; i<size; i++) {

numbers[i] = rand()%100;

}

for (int i=0; i<size; i++) {

cout << numbers[i];

}

for (int i=0; i<size-1; i++) {

for (int j=size-1; j>0; j--) {

if (numbers[j] < numbers[j-1]) {

int temp = numbers[j];

numbers[j] = numbers[j-1];

numbers[j-1] = temp;

}

}

}

for (int i=0; i<size; i++) {

cout << numbers[i];

}

Согласитесь, что при беглом взгляде на эту программу довольно сложно сразу понять, что делает эта программа (не имея такой информации заранее). Грамотный вариант при разработке такой программы заключается в том, чтобы написать отдельные функции для каждой из решаемых задач, создать для них прототипы и поместить их реализации ниже функции main():

void initNumbers(int numbers[], int size);

void printNumbers(int numbers[], int size);

void sortNumbers(int numbers[], int size);

Int main() {

const int mySize = 10;

int myNumbers[mySize];

initNumbers(myNumbers, mySize);

printNumbers(myNumbers, mySize);

sortNumbers(myNumbers, mySize);

printNumbers(myNumbers, mySize);

}

void initNumbers(int numbers[], int size) {

for (int i=0; i<size; i++) {

numbers[i] = rand()%100;

}

}

void printNumbers(int numbers[], int size) {

for (int i=0; i<size; i++) {

cout << numbers[i];

}

}

void sortNumbers(int numbers[], int size) {

for (int i=0; i<size-1; i++) {

for (int j=size-1; j>0; j--) {

if (numbers[j] < numbers[j-1]) {

int temp = numbers[j];

numbers[j] = numbers[j-1];

numbers[j-1] = temp;

}

}

}

}

Посмотрите на функцию main() и попробуйте теперь понять, что она делает. Все очевидно: функция initNumbers() задает массив, printNumbers() выводит массив на экран, sortNumbers() – сортирует, и, наконец, еще один вызов printNumbers() выводит на экран отсортированный массив. При необходимости эти функции можно поместить в заголовочный файл, что, тем не менее, никак не затронет функцию main().

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