functions refactoring in multicolumn draft

This commit is contained in:
ivan-igorevich 2021-08-24 07:22:56 +03:00
parent 9586a31f27
commit bb68a8cd2d
1 changed files with 44 additions and 29 deletions

View File

@ -89,38 +89,53 @@ x = 110
$ $
\end{verbatim} \end{verbatim}
Как уже было сказано, параметры - это переменные, которые хранят в себе некоторые начальные значения вызова функции. Параметризация позволяет использовать одни и те же функции с разными исходными данными. Приглядимся повнимательнее к хорошо знакомой нам функции \code{printf();}. Строка, которую мы пишем в круглых скобках в двойных кавычках - это аргумент функции. То есть мы знаем, что функция умеет выводить на экран строки, как именно - нам нет дела, а какие именно строки - мы указываем в качестве аргумента. Функция \code{printf();} примечательна еще и тем, что она может принимать в себя нефиксированное количество аргументов. Описание работы таких функций, а также их написание выходит далеко за пределы основ языка, нам важно помнить что мы можем это использовать. В аргументе функции \code{printf()} мы можем написать заполнитель соответствующего типа и, например, вызвать нашу функцию \code{sum}. Как уже было сказано, параметры - это переменные, которые хранят в себе некоторые начальные значения вызова функции. Параметризация позволяет использовать одни и те же функции с разными исходными данными. Приглядимся повнимательнее к хорошо знакомой нам функции \code{printf();}. Строка, которую мы пишем в круглых скобках в двойных кавычках - это аргумент функции. То есть мы знаем, что функция умеет выводить на экран строки, как именно - нам нет дела, а какие именно строки - мы указываем в качестве аргумента. Функция \code{printf();} примечательна еще и тем, что она может принимать в себя нефиксированное количество аргументов. Описание работы таких функций, а также их написание выходит далеко за пределы основ языка, нам важно помнить что мы можем это использовать. В аргументе функции \code{printf()} мы можем написать заполнитель соответствующего типа и, например, вызвать нашу функцию \code{sum}.
\subsection{Оформление функций. Рефакторинг кода} \subsection{Оформление функций. Понятие рефакторинга}
Теперь мы без проблем можем оформить уже существующие у нас программы в виде функций. Например, оформим в виде функции программу проверки простоты числа. Для этого опишем функцию которая возвращает целое число, назовем ее \code{isPrime()}, в качестве параметра она будет принимать целое число, назовем его \code{number}. Найдем в предыдущих разделах (стр. \hyperref[code:isPrime]{\pageref{code:isPrime}}) программу определения простоты числа и скопируем в тело функции. Теперь мы без проблем можем оформить уже существующие у нас программы в виде функций. Например, оформим в виде функции программу проверки простоты числа. Для этого опишем функцию которая возвращает целое число, назовем ее \code{isPrime()}, в качестве параметра она будет принимать целое число, назовем его \code{number}. Найдем в предыдущих разделах (стр. \hyperref[code:isPrime]{\pageref{code:isPrime}}) программу определения простоты числа и скопируем в тело функции. Внесем небольшие правки, уберем вывод так как это будет, можно сказать, классическая проверяющая функция, вывод оставим для функции \code{int main (int argc, char *argv[])}, пусть о наличии у нас терминала <<знает>> только она.
% Внесем небольшие правки, уберем вывод т.к. это проверяющая функция, вывод оставим для основной части. И допишем если делителей 2 то число простое, возвращаем 1. Если же делителей больше число не простое, возвращаем 0. \frm{Такой процесс, перенос участков кода между функциями, выделение участков кода в функции, синтаксические, стилистические и другие улучшения, называетя \textbf{рефакторингом}. Обычно, рефакторингом занимаются сами разработчики в свободное от основной деятельности времени, в периоды код ревью или по необходимости улучшить читаемость/повторяемость собственного кода.}
% Такой вывод можно записать и другим способом, return (d == 2) это выражение в случае истины вернет 1 в случае лжи 0. Следовательно, допишем условия: если делителей два, то число простое, возвращаем \code{ИСТИНУ}, то есть любое ненулевое значение, в нашем примере - единицу. Если же делителей больше число не простое, возвращаем \code{ЛОЖЬ}, в нашем случае, это ноль. Такой вывод можно записать и другим способом, \code{return (d == 2)} это выражение в случае истины вернет единицу в случае лжи ноль. Или можно воспользоваться тернарным оператором, то есть, написать \code{return (d == 2) ? 1 : 0}: если условие в скобках истинно вернется единица, ложно ноль. Также важно, что выйти из функции мы можем на любом этапе ее выполнения, например если делителей уже три, то нам нужно не завершать цикл, а вернуть \code{ЛОЖЬ} из функции.
% Можно воспользоваться тернарным оператором, т.е. написать \begin{multicols}{2}
% return (d == 2) ? 1 : 0 если условие в скобках истинно вернется 1, ложно 0.; \begin{lstlisting}[language=C,style=CCodeStyle]
% Выйти из функции мы можем на любом этапе ее выполнения, например если делителей уже 3, то мы можем вернуть 0. int isPrime(int number){
int d = 0, i = 1;
while(i <= number){
if(number % i++ ==0)
d++;
else
continue;
if (d == 3) return 0;
}
//if (d == 2) return 1;
//else return 0;
//return (d == 2) ? 1 : 0;
return (d == 2)
}
% int isPrime(int number){ \end{lstlisting}
% int d = 0, i = 1; \columnbreak
% while(i <= number){ \begin{lstlisting}[language=C,style=CCodeStyle]
% if(number % i++ ==0) int main(int argc, char *argv[]) {
% d++; int number;
% else int dividers = 0, i = 1;
% continue; printf("Enter number: ");
% if (d == 3) break; scanf("%d", &number);
% } while (i <= number) {
% //if (d == 2) return 1; if (number++ % i == 0) {
% //else return 0; dividers++;
} else {
% return (d == 2) continue;
}
if (dividers == 3)
% //return (d == 2) ? 1 : 0; break;
}
% } printf("Number %d is%s prime",
number,
(dividers == 2) ? "" : " not"
% if (d == 3) return 0; );
}
\end{lstlisting}
\end{multicols}
% Немного подправим вывод, внесем в него вызов функции isPrime и объявим переменную int num, которую будем передавать в качестве аргумента в функцию isPrime. % Немного подправим вывод, внесем в него вызов функции isPrime и объявим переменную int num, которую будем передавать в качестве аргумента в функцию isPrime.