\section{JavaScript Alapok} \subsection{} \begin{frame}{Mi a JavaScript?} \begin{itemize} \item \kiemel{Dinamikus, interpretált programozási nyelv} \item Eredetileg böngészőkben futó szkriptnyelv (1995, Brendan Eich) \item Ma már szerveroldali fejlesztésre is használható (Node.js) \item Gyengén típusos, prototype-alapú objektum-orientált nyelv \item Az ECMAScript szabvány implementációja \end{itemize} \vspace{0.5cm} \begin{block}{Miért fontos?} A JavaScript az egyetlen nyelv, amely \kiemel{natívan fut a böngészőben}, és a Node.js révén a \kiemel{backend fejlesztés} alapja is lehet. \end{block} \end{frame} \begin{frame}[fragile,shrink=10]{Változók és adattípusok} \begin{columns} \begin{column}{0.5\textwidth} \begin{block}{Változó deklaráció} \begin{lstlisting}[style=JavaScript] // Konstans (nem valtoztathato) const PI = 3.14159; // Blokk scope valtozo let count = 0; count = 1; // OK // Fuggvenyi scope (kerulendo!) var oldStyle = "legacy"; \end{lstlisting} \end{block} \end{column} \begin{column}{0.5\textwidth} \begin{block}{Primitív típusok} \begin{lstlisting}[style=JavaScript] let num = 42; // Number let str = "Hello"; // String let bool = true; // Boolean let empty = null; // Null let undef = undefined; // Undefined let big = 123n; // BigInt let sym = Symbol("id"); // Symbol \end{lstlisting} \end{block} \end{column} \end{columns} \end{frame} \begin{frame}[fragile,shrink=10]{Tömbök és objektumok} \begin{columns} \begin{column}{0.5\textwidth} \begin{block}{Tömbök (Arrays)} \begin{lstlisting}[style=JavaScript] const fruits = ['apple', 'banana']; // Elem hozzaadasa fruits.push('orange'); // Bejaras fruits.forEach(fruit => { console.log(fruit); }); // Szures const long = fruits.filter( f => f.length > 5 ); \end{lstlisting} \end{block} \end{column} \begin{column}{0.5\textwidth} \begin{block}{Objektumok (Objects)} \begin{lstlisting}[style=JavaScript] const user = { name: 'Alice', age: 25, greet() { return `Hi, I'm ${this.name}`; } }; // Eleres console.log(user.name); console.log(user['age']); // Uj tulajdonsag user.email = 'alice@example.com'; \end{lstlisting} \end{block} \end{column} \end{columns} \end{frame} \begin{frame}[fragile,shrink=10]{Függvények} \begin{block}{Hagyományos függvénydeklaráció} \begin{lstlisting}[style=JavaScript] function add(a, b) { return a + b; } \end{lstlisting} \end{block} \begin{block}{Arrow function (ES6+)} \begin{lstlisting}[style=JavaScript] const add = (a, b) => a + b; const square = x => x * x; // Egy parameter, kapcsos zarojel nelkul const greet = name => { const message = `Hello, ${name}!`; return message; }; \end{lstlisting} \end{block} \end{frame} \begin{frame}[fragile,shrink=10]{Destructuring és Spread operátor} \begin{columns} \begin{column}{0.5\textwidth} \begin{block}{Destructuring} \begin{lstlisting}[style=JavaScript] // Tomb destructuring const [first, second] = [1, 2, 3]; // Objektum destructuring const {name, age} = user; // Fuggveny parameterenel function print({name, age}) { console.log(`${name}: ${age}`); } \end{lstlisting} \end{block} \end{column} \begin{column}{0.5\textwidth} \begin{block}{Spread operator (...)} \begin{lstlisting}[style=JavaScript] // Tomb osszefuzes const arr = [...arr1, ...arr2]; // Objektum masolasa const copy = {...original}; // Rest parameter function sum(...numbers) { return numbers.reduce( (a, b) => a + b, 0 ); } \end{lstlisting} \end{block} \end{column} \end{columns} \end{frame} \begin{frame}[fragile,shrink=10]{Aszinkron programozás - Callback} \begin{block}{Callback függvények} \begin{lstlisting}[style=JavaScript] function fetchData(callback) { setTimeout(() => { const data = {id: 1, name: 'User'}; callback(data); }, 1000); } fetchData((data) => { console.log(data); }); \end{lstlisting} \end{block} \begin{alertblock}{Callback Hell problémája} Többszintű beágyazott callback-ek olvashatatlan kódot eredményeznek. \end{alertblock} \end{frame} \begin{frame}[fragile,shrink=10]{Aszinkron programozás - Promise} \begin{block}{Promise használata} \begin{lstlisting}[style=JavaScript] function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { const data = {id: 1, name: 'User'}; resolve(data); // reject(new Error('Failed')); }, 1000); }); } fetchData() .then(data => console.log(data)) .catch(error => console.error(error)) .finally(() => console.log('Done')); \end{lstlisting} \end{block} \end{frame} \begin{frame}[fragile,shrink=10]{Aszinkron programozás - Async/Await} \begin{block}{Modern async/await szintaxis} \begin{lstlisting}[style=JavaScript] async function loadUser() { try { const user = await fetchData(); console.log(user); const posts = await fetchUserPosts(user.id); console.log(posts); return {user, posts}; } catch (error) { console.error('Error:', error); } } // Hasznalat loadUser(); \end{lstlisting} \end{block} \end{frame} \begin{frame}[fragile,shrink=10]{ES6+ Modern jellemzők} \begin{itemize} \item \kiemel{Template literals:} \texttt{`Hello \$\{name\}`} \item \kiemel{Default parameters:} \texttt{function greet(name = 'Guest')} \item \kiemel{Class syntax:} \end{itemize} \begin{block}{Class példa} \begin{lstlisting}[style=JavaScript] class Person { constructor(name, age) { this.name = name; this.age = age; } greet() { return `Hi, I'm ${this.name}`; } } const alice = new Person('Alice', 25); \end{lstlisting} \end{block} \end{frame} \begin{frame}{Összefoglalás} \begin{block}{JavaScript alapok} \begin{itemize} \item Változók: \texttt{const}, \texttt{let} (kerüljük a \texttt{var}-t) \item Adattípusok: primitívek és objektumok \item Tömbök és objektumok manipulációja \item Függvények: hagyományos és arrow function \item Destructuring és spread operátor \item Aszinkron programozás: callback, Promise, async/await \item Modern ES6+ jellemzők \end{itemize} \end{block} \end{frame}