Skip to content
Snippets Groups Projects
Select Git revision
  • master default
  • ls2021
  • ls1920
3 results

03-typing.tex

Blame
  • 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}