third week

This commit is contained in:
Donát committed 2026-09-08 09:36:02 +02:00
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}