third week
This commit is contained in:
1 parent
95e62c915f
commit
a935851e22
31 files changed
+1269
-33
No files matched your search
@@ -0,0 +1,88 @@
|
||||
\section{Függvények}
|
||||
|
||||
\begin{frame}[fragile]{Függvények típusozása}
|
||||
\footnotesize
|
||||
Egy TypeScript függvénynél mind a paraméterek, mind a visszatérési érték típusát megadhatjuk -- a visszatérési típust a fordító a legtöbbször ki is következteti, de explicit kiírva olvashatóbb, és véd az elgépelés ellen.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
function multiply(a: number, b: number): number {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
// Nincs visszatero ertek -> void
|
||||
function logMessage(message: string): void {
|
||||
console.log(message);
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{block}{Miért érdemes kiírni a visszatérési típust?}
|
||||
Ha véletlenül rossz típusú értéket adnánk vissza (pl. \texttt{string}-et \texttt{number} helyett), a fordító azonnal jelezné a hibát -- még mielőtt bárhol meghívnánk a függvényt.
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Opcionális és alapértelmezett paraméterek}
|
||||
\footnotesize
|
||||
Nem minden paraméter kötelező -- a JavaScript-hez hasonlóan itt is megadhatunk alapértelmezett értéket, vagy jelölhetjük egy paramétert opcionálisként.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
function greet(name: string, greeting: string = 'Szia'): string {
|
||||
return `${greeting}, ${name}!`;
|
||||
}
|
||||
|
||||
function createUser(name: string, nickname?: string) {
|
||||
return { name, nickname: nickname ?? name };
|
||||
}
|
||||
|
||||
greet('Anna'); // "Szia, Anna!"
|
||||
greet('Anna', 'Hello'); // "Hello, Anna!"
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{alertblock}{Fontos sorrend}
|
||||
Az opcionális (\texttt{?}) és alapértelmezett paraméterek csak a kötelező paraméterek \emph{után} szerepelhetnek a paraméterlistában.
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Függvénytípusok -- callback-ek típusozása}
|
||||
\footnotesize
|
||||
Amikor egy függvény egy másik függvényt vár paraméterként (pl. egy callback-et), magának a "függvény alaknak" is megadhatjuk a típusát.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
type MathOperation = (a: number, b: number) => number;
|
||||
|
||||
function calculate(a: number, b: number, op: MathOperation): number {
|
||||
return op(a, b);
|
||||
}
|
||||
|
||||
const sum: MathOperation = (a, b) => a + b;
|
||||
calculate(2, 3, sum); // 5
|
||||
\end{lstlisting}
|
||||
|
||||
Ez különösen hasznos Express.js-ben: egy route handler is pontosan egy ilyen "függvény alakú" típus (\texttt{(req, res) => void}).
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Function overloads -- röviden}
|
||||
\footnotesize
|
||||
Néha egy függvény többféle paraméter-kombinációval is hívható, és a visszatérési típus a bemenettől függ. Erre valók a \textbf{overloads}: több szignatúra deklarálása egyetlen implementáció előtt.
|
||||
|
||||
\begin{itemize}
|
||||
\item Több "fejlécet" (szignatúrát) írunk le, majd egyetlen tényleges implementációt
|
||||
\item A hívó fél oldaláról úgy tűnik, mintha több, különböző típusú változata lenne a függvénynek
|
||||
\item Ritkán szükséges kezdőként -- inkább unió típusokkal (következő fejezet) old meg a legtöbb esetet
|
||||
\end{itemize}
|
||||
|
||||
\begin{block}{Gyakorlati tanács}
|
||||
Ha csak most ismerkedsz a TypeScript-tel, nem kell aktívan használnod az overloads-ot -- elég felismerni, ha egy könyvtár dokumentációjában találkozol vele.
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Összefoglalás -- Függvények}
|
||||
\footnotesize
|
||||
\begin{block}{Függvények TypeScript-ben}
|
||||
\begin{itemize}
|
||||
\item Paraméterek és visszatérési típus típusozása -- \texttt{void}, ha nincs visszatérő érték
|
||||
\item Alapértelmezett érték (\texttt{= ...}) és opcionális paraméter (\texttt{?}), mindig a kötelezők után
|
||||
\item Függvénytípusok: \texttt{(a: number, b: number) => number} -- callback-ek típusozásához
|
||||
\item Overloads: több szignatúra egy implementációhoz -- ritkán szükséges kezdőként
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
Reference in new issue
Block a user