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,122 @@
|
||||
\section{Enum/Osztályok}
|
||||
|
||||
\begin{frame}[fragile]{Enum alapok}
|
||||
\footnotesize
|
||||
Az \texttt{enum} (felsorolt típus) egy névvel ellátott, korlátozott értékkészletet definiál -- hasonló célt szolgál, mint a korábban látott string literal union, de saját névtérrel és futásidejű objektummal is jár.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
enum Role {
|
||||
Admin, // 0
|
||||
Editor, // 1
|
||||
Viewer, // 2
|
||||
}
|
||||
|
||||
enum Status {
|
||||
Pending = 'pending',
|
||||
Active = 'active',
|
||||
Closed = 'closed',
|
||||
}
|
||||
|
||||
const myRole: Role = Role.Admin;
|
||||
\end{lstlisting}
|
||||
|
||||
Numerikus enumnál automatikusan 0-tól számozódnak az értékek; string enumnál mi adjuk meg a konkrét szöveges értéket -- ez utóbbi jobban olvasható naplókban, hibaüzenetekben.
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Osztályok TypeScript-ben}
|
||||
\footnotesize
|
||||
A TypeScript osztályai a JavaScript ES6 osztályaira épülnek, kiegészítve a mezők típusozásával.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
class Person {
|
||||
name: string;
|
||||
age: number;
|
||||
|
||||
constructor(name: string, age: number) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
greet(): string {
|
||||
return `Szia, ${this.name} vagyok!`;
|
||||
}
|
||||
}
|
||||
|
||||
const p = new Person('Anna', 25);
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Access modifierek}
|
||||
\footnotesize
|
||||
Az osztály mezőihez és metódusaihoz \textbf{láthatósági szinteket} rendelhetünk -- ez segít elrejteni az implementációs részleteket, és csak a szándékolt "publikus felületet" mutatni kifelé.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
class BankAccount {
|
||||
private balance: number = 0;
|
||||
public readonly owner: string;
|
||||
|
||||
constructor(owner: string) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public deposit(amount: number): void {
|
||||
this.balance += amount;
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{\texttt{public}} (alapértelmezett): bárhonnan elérhető
|
||||
\item \textbf{\texttt{private}}: csak az osztályon belülről érhető el
|
||||
\item \textbf{\texttt{protected}}: az osztályon és leszármazottjain belül érhető el
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Interfész implementálása osztállyal}
|
||||
\footnotesize
|
||||
Egy osztály az \texttt{implements} kulcsszóval kötelezettséget vállal arra, hogy megfelel egy adott interfésznek -- a fordító ellenőrzi, hogy tényleg minden szükséges mezőt/metódust megvalósít-e.
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
interface Greetable {
|
||||
greet(): string;
|
||||
}
|
||||
|
||||
class Person implements Greetable {
|
||||
constructor(private name: string) {}
|
||||
|
||||
greet(): string {
|
||||
return `Szia, ${this.name} vagyok!`;
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Decorators -- rövid kitekintés}
|
||||
\footnotesize
|
||||
A \textbf{decorator} egy speciális jelölés (\texttt{@valami}), amit osztályok, mezők vagy metódusok elé írhatunk, és ami futásidejű viselkedést csatol hozzájuk -- kicsit hasonlóan ahhoz, ahogy Express-ben a middleware-ek "csomagolják be" a route handlereket.
|
||||
|
||||
\begin{block}{Miért fontos ez most csak kitekintésként?}
|
||||
A decorators ma még kísérleti funkció TypeScript-ben, de rendkívül elterjedt az ORM-ekben (pl. a későbbi heteken megismert TypeORM) -- ott \texttt{@Entity}, \texttt{@Column} jelölésekkel írjuk le az adatbázis-táblákat.
|
||||
\end{block}
|
||||
|
||||
\begin{lstlisting}[language=JavaScript,style=NodeJS]
|
||||
@Entity()
|
||||
class User {
|
||||
@Column()
|
||||
name: string;
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Összefoglalás -- Enum és Osztályok}
|
||||
\footnotesize
|
||||
\begin{block}{Enum és Osztályok}
|
||||
\begin{itemize}
|
||||
\item \texttt{enum}: névvel ellátott, korlátozott értékkészlet (numerikus vagy string alapú)
|
||||
\item Osztályok: mezők típusozása, konstruktor, metódusok -- az ES6 osztályokra épül
|
||||
\item Access modifierek: \texttt{public} / \texttt{private} / \texttt{protected} -- a láthatóság szabályozása
|
||||
\item \texttt{implements}: egy osztály kötelezettséget vállal egy interfész megvalósítására
|
||||
\item Decorators: \texttt{@valami} jelölések, amik későbbi heteken (TypeORM) kerülnek elő
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
Reference in new issue
Block a user