gb-java-devel/jtc2-02a.tex

100 lines
8.8 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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}