Select Git revision
03-typing.tex
-
Martin Mareš authoredMartin Mareš authored
03-typing.tex 2.78 KiB
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{palatino}
\usepackage{verbatim}
\usetheme{Warsaw}
\title{Programování 2: Typové anotace}
\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}}
\institute{Katedra Aplikované Matematiky\\MFF UK Praha}
\date{2020}
\setbeamersize{text margin left=5mm}
\setbeamersize{text margin right=5mm}
\begin{document}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{footline}{}
\setbeamerfont{title page}{family=\rmfamily}
\shorthandoff{"}
\begin{frame}
\titlepage
\end{frame}
\input ../slidemac.tex
% ----------------------------------------------------------------------
\begin{frame}{Proč a nač?}
Jak se programovací jazyky chovají k~typům dat:
\begin{itemize}
\item {\bf statické} typování -- typ mají proměnné a funkce
\item {\bf dynamické} typování -- typ mají hodnoty
\end{itemize}
~
Obojí má své výhody i nevýhody.
~
K~čemu třeba jsou užitečné statické typy:
\begin{itemize}
\item Lepší dokumentace\\(např.: funguje {\bf math.exp} na komplexní čísla?)
\item Kontrola konzistence typů před spuštěním programu
\item Napovídání v~editorech
\end{itemize}
~
Dnešní Python umí kombinovat statické a dynamické typy~\dots
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Typové anotace}
{\tt\color{blue}
def f(x: int, y: str) -> int:\\
~~~~return x + len(y)
}
\smallskip
Čteme: {\bf f} je funkce, parametr {\bf x} je typu {\bf int}, {\bf y} typu {\bf str},\\
vrací výsledek typu {\bf int}.
~
{\tt\color{blue}
a: int = 42
}
\smallskip
Proměnné {\bf a} jsme deklarovali typ {\bf int}.
~
Python sám typy nekontroluje (to dělají samostatné type checkery),
ale pamatuje si je:
\smallskip
\py{%
f.\_\_annotations\_\_
}{%
\{'x': int, 'y': str, 'return': int\}
}
\py{%
help(f)
}{%
Help on function f in module \_\_main\_\_:\\
f(x: int, y: str) -> int
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Složitější typy}
{\tt\color{blue}
from typing import List\\
def g(seznam: List[str]) -> None:
}
\smallskip
Parametrizovaný typ pro seznamy.
~
{\tt\color{blue}
from typing import Optional\\
def center(s: str, šíře: Optional[int]=80) -> str:
}
\smallskip
Buď {\bf int} nebo {\bf None} (též chybí-li parametr při volání).
~
{\tt\color{blue}
Class Třída:\\
~~~~def metoda(self, něco: int):
}
\smallskip
{\bf self} automaticky dostane typ {\bf Třída}.
~
{\tt\color{blue}
from typing import Sequence, TypeVar\\
T = TypeVar("T")\\
def choose(s: Sequence[T]) -> T:
}
\smallskip
Funguje pro jakoukoliv homogenní posloupnost (seznam/tuple/\dots).
\end{frame}
% ----------------------------------------------------------------------
\end{document}