diff --git a/scenarios/build/jc-2-a.pdf b/scenarios/build/jd-11-a.pdf similarity index 100% rename from scenarios/build/jc-2-a.pdf rename to scenarios/build/jd-11-a.pdf diff --git a/scenarios/build/jtc1-1b.pdf b/scenarios/build/jtc1-01b.pdf similarity index 100% rename from scenarios/build/jtc1-1b.pdf rename to scenarios/build/jtc1-01b.pdf diff --git a/scenarios/jc-2-a.tex b/scenarios/jd-11-a.tex similarity index 100% rename from scenarios/jc-2-a.tex rename to scenarios/jd-11-a.tex diff --git a/scenarios/jtc1-1b.tex b/scenarios/jtc1-01b.tex similarity index 100% rename from scenarios/jtc1-1b.tex rename to scenarios/jtc1-01b.tex diff --git a/scenarios/jtc2-02b.tex b/scenarios/jtc2-02b.tex new file mode 100644 index 0000000..ce02c3d --- /dev/null +++ b/scenarios/jtc2-02b.tex @@ -0,0 +1,141 @@ +\documentclass[russian]{beamer} + +\usepackage{multicol} +\usepackage[russian]{babel} +\usepackage{fontspec} +\input{../settings/fancy-listings-preamble} +\usepackage{forest} + +\makeatletter +\def\beamer@framenotesbegin{% at beginning of slide + \usebeamercolor[fg]{normal text} + \gdef\beamer@noteitems{}% + \gdef\beamer@notes{}% +} +\makeatother +\newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize} + +% \setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote} +% \setbeameroption{show notes on second screen=right} + +\usetheme{Madrid} +\usecolortheme{seahorse} +\setsansfont{IBM Plex Sans} + +\title{Специализация: данные и функции} +\author{Иван Игоревич Овчинников} +\institute[GB: Java]{GeekBrains. Java Core.} +\date{2022} + +\begin{document} +\setbeamertemplate{enumerate items}[circle] +\setbeamertemplate{note page}[plain] +\setbeameroption{show notes} + +\frame{\titlepage} +\note{Перейдём к интересному: что можно хранить в джаве, как оно там хранится, и как этим манипулировать} + +\begin{frame} +\frametitle{В предыдущих сериях} +\begin{itemize} +\item Краткая история (причины возникновения); +\item инструментарий, выбор версии; +\item CLI; +\item структура проекта; +\item документирование; +\item некоторые интересные способы сборки проектов. +\end{itemize} +\end{frame} +\note{ +На прошлом уроке мы коротко поговорили об истории и причинах возникновения языка джава, вскользь посмотрели на инструментарий, который позволит нам писать на джава и получать результат, поверхностно изучилит интерфейс командной строки, научились стремительно создавать довольно симпатичную документацию к своему коду и посмотрели на то как можно автоматизировать ручную работу при компиляции своих проектов. +} + +\begin{frame} +\frametitle{На этой лекции} +\end{frame} +\note{ +Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в 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{Основные типы данных в языке С} + \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} diff --git a/scenarios/jtc1-2b.tex b/scenarios/jtd6-11b.tex similarity index 100% rename from scenarios/jtc1-2b.tex rename to scenarios/jtd6-11b.tex