\documentclass[j-spec.tex]{subfiles} \begin{document} \section{Специализация: данные и функции} \subsection{В предыдущем разделе} \begin{itemize} \item Краткая история (причины возникновения); \item инструментарий, выбор версии; \item CLI; \item структура проекта; \item документирование; \item некоторые интересные способы сборки проектов. \end{itemize} \subsection{В этом разделе} Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами). \subsection{Данные} \subsubsection{Типы, преобразование типов} %константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными) Хранение данных в Java осуществляется привычным для программиста образом: в переменных и константах. Языки программирования бывают типизированными и нетипизированными (бестиповыми). Отсутствие типизации в основном присуще старым и низкоуровневым языкам программирования, например, Forth, некоторые ассемблеры. Все данные в таких языках считаются цепочками бит произвольной длины и, как следует из названия, не делятся на типы. Работа с ними часто труднее, и при чтении кода не всегда ясно, о каком типе переменной идет речь. При этом часто безтиповые языки работают быстрее типизированных, но описывать с их помощью большие проекты со сложными взаимосвязями довольно утомительно. \begin{frm} \info Java является языком со \textbf{строгой} (также можно встретить термин «\textbf{сильной}») \textbf{явной} \textbf{статической} типизацией. \end{frm} Что это значит? \begin{itemize} \item Статическая - у каждой переменной должен быть тип и мы этот тип поменять не можем. Этому свойству противопоставляется динамическая типизация; \item Явная - при создании переменной мы должны ей обязательно присвоить какой-то тип, явно написав это в коде. Бывают языки с неявной типизацией, например, Python; \item Строгая(сильная) - невозможно смешивать разнотипные данные. С другой стороны, существует JavaScript, в котором запись \code{2 + true} выдаст результат \code{3}. \end{itemize} Все данные в Java делятся на две основные категории: примитивные и ссылочные. Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); \begin{figure}[H] \centering \begin{tabular}{|p{17mm}|p{80mm}|p{55mm}|} \hline Тип & Пояснение & Диапазон \\ \hline byte & Самый маленький из адресуемых типов, 8 бит, знаковый & [\textminus128, +127] \\ \hline short & Тип короткого целого числа, 16 бит, знаковый & [\textminus32 768, +32 767]\\ \hline char & Целочисленный тип для хранения символов в кодировке UTF-8, 16 бит, беззнаковый & [0, +65 535]\\ \hline int & Основной тип целого числа, 32 бита, знаковый & [\textminus2 147 483 648, +2 147 483 647] \\ \hline long & Тип длинного целого числа, 64 бита, знаковый & [\textminus9 223 372 036 854 775 808, +9 223 372 036 854 775 807] \\ \hline float & Тип вещественного числа с плавающей запятой (одинарной точности, 32 бита) & \\ \hline double & Тип вещественного числа с плавающей запятой (двойной точности, 64 бита) & \\ \hline boolean & Логический тип данных & true, false \\ \hline \end{tabular} \caption{Основные типы данных в языке Java} \label{tab:types} \end{figure} Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Функции: параметры, возвращаемые значения, перегрузка функций; \subsubsection{Антипаттерн "магические числа"} В прошлом примере мы использовали антипаттерн - плохой стиль для написания кода. Число 18 используется в коде коде без пояснений. Такой антипаттерн называется "магическое число". Рекомендуется помещать числа в константы, которые храняться в начале файла. ADULT = 18 age = float(input('Ваш возраст: ')) how\_old = age - ADULT print(how\_old, "лет назад ты стал совершеннолетним") Плюсом такого подхода является возможность легко корректировать большие проекты. Представьте, что в вашем коде несколько тысяч строк, а число 18 использовалось несколько десятков раз. ● При развертывании проекта в стране, где совершеннолетием считается 21 год вы будете перечитывать весь код в поисках магических "18" и править их на "21". В случае с константой изменить число нужно в одном месте. ● Дополнительный сложности могут возникнуть, если в коде будет 18 как возраст совершеннолетия и 18 как коэффициент для рассчёт чего-либо. Теперь править кода ещё сложнее, ведь возраст изменился, а коэффициент -нет. В случае с сохранением значений в константы мы снова меняем число в одном месте. \subsection{Базовый функционал языка} \subsubsection{Математические операторы} \subsubsection{Условия} \subsubsection{Циклы} \subsubsection{Бинарные арифметические операторы}; \subsection{Функции} параметры, возвращаемые значения, перегрузка функций \subsection*{Задания к семинару} \begin{itemize} \item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода); \item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд; \end{itemize} \end{document}