You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/sr/2-js-basics/3-making-decisions/README.md

306 lines
21 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "90a3c32c3377f83ab750c2447c77ab98",
"translation_date": "2025-10-24T23:04:09+00:00",
"source_file": "2-js-basics/3-making-decisions/README.md",
"language_code": "sr"
}
-->
# Основе JavaScript-а: Доношење одлука
![Основе JavaScript-а - Доношење одлука](../../../../translated_images/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.sr.png)
> Скетч од [Tomomi Imura](https://twitter.com/girlie_mac)
Да ли сте се икада запитали како апликације доносе паметне одлуке? Као, на пример, како навигациони систем бира најбржи пут или како термостат одлучује када да укључи грејање? Ово је основни концепт доношења одлука у програмирању.
Као што је Аналитички мотор Чарлса Бебиџа био дизајниран да прати различите секвенце операција на основу услова, савремени JavaScript програми морају да праве изборе на основу различитих околности. Ова способност гранања и доношења одлука је оно што трансформише статички код у одзивне, интелигентне апликације.
У овом лекцији, научићете како да имплементирате условну логику у својим програмима. Истражићемо условне изразе, операторе поређења и логичке изразе који омогућавају вашем коду да процени ситуације и одговара на одговарајући начин.
## Квиз пре предавања
[Квиз пре предавања](https://ff-quizzes.netlify.app/web/quiz/11)
Способност доношења одлука и контролисања тока програма је основни аспект програмирања. Овај део покрива како да контролишете пут извршења ваших JavaScript програма користећи Булове вредности и условну логику.
[![Доношење одлука](https://img.youtube.com/vi/SxTp8j-fMMY/0.jpg)](https://youtube.com/watch?v=SxTp8j-fMMY "Доношење одлука")
> 🎥 Кликните на слику изнад за видео о доношењу одлука.
> Ову лекцију можете проћи на [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-if-else/?WT.mc_id=academic-77807-sagibbon)!
## Кратак преглед Булових вредности
Пре него што истражимо доношење одлука, хајде да се подсетимо Булових вредности из претходне лекције. Назване по математичару Џорџу Булу, ове вредности представљају бинарна стања или `true` или `false`. Нема двосмислености, нема средине.
Ове бинарне вредности чине основу све рачунарске логике. Свака одлука коју ваш програм донесе на крају се своди на Булову процену.
Креирање Булових променљивих је једноставно:
```javascript
let myTrueBool = true;
let myFalseBool = false;
```
Ово креира две променљиве са експлицитним Буловим вредностима.
✅ Булове вредности су назване по енглеском математичару, филозофу и логичару Џорџу Булу (18151864).
## Оператори поређења и Булове вредности
У пракси, ретко ћете ручно постављати Булове вредности. Уместо тога, генерисаћете их процењивањем услова: "Да ли је овај број већи од оног?" или "Да ли су ове вредности једнаке?"
Оператори поређења омогућавају ове процене. Они упоређују вредности и враћају Булове резултате на основу односа између операнда.
| Симбол | Опис | Пример |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| `<` | **Мање од**: Упоређује две вредности и враћа `true` ако је вредност са леве стране мања од оне са десне | `5 < 6 // true` |
| `<=` | **Мање или једнако**: Упоређује две вредности и враћа `true` ако је вредност са леве стране мања или једнака оној са десне | `5 <= 6 // true` |
| `>` | **Веће од**: Упоређује две вредности и враћа `true` ако је вредност са леве стране већа од оне са десне | `5 > 6 // false` |
| `>=` | **Веће или једнако**: Упоређује две вредности и враћа `true` ако је вредност са леве стране већа или једнака оној са десне | `5 >= 6 // false` |
| `===` | **Строга једнакост**: Упоређује две вредности и враћа `true` ако су вредности са десне и леве стране једнаке И истог типа података. | `5 === 6 // false` |
| `!==` | **Неједнакост**: Упоређује две вредности и враћа супротну Булову вредност од оне коју би вратио оператор строге једнакости | `5 !== 6 // true` |
✅ Проверите своје знање тако што ћете написати нека поређења у конзоли вашег претраживача. Да ли вас неки добијени подаци изненађују?
## If израз
`if` израз је као постављање питања у вашем коду. "Ако је овај услов тачан, онда уради ову ствар." Вероватно је то најважнији алат који ћете користити за доношење одлука у JavaScript-у.
Ево како функционише:
```javascript
if (condition) {
// Condition is true. Code in this block will run.
}
```
Услов иде унутар заграда, и ако је `true`, JavaScript извршава код унутар витичастих заграда. Ако је `false`, JavaScript једноставно прескаче цео блок.
Често ћете користити операторе поређења за креирање ових услова. Хајде да видимо практичан пример:
```javascript
let currentMoney = 1000;
let laptopPrice = 800;
if (currentMoney >= laptopPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
}
```
Пошто `1000 >= 800` процењује на `true`, код унутар блока се извршава, приказујући "Купујем нови лаптоп!" у конзоли.
## If..Else израз
Али шта ако желите да ваш програм уради нешто друго када услов није испуњен? Ту долази `else` то је као да имате резервни план.
`else` израз вам даје начин да кажете "ако овај услов није тачан, уради нешто друго."
```javascript
let currentMoney = 500;
let laptopPrice = 800;
if (currentMoney >= laptopPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
} else {
// Condition is false. Code in this block will run.
console.log("Can't afford a new laptop, yet!");
}
```
Сада, пошто је `500 >= 800` `false`, JavaScript прескаче први блок и уместо тога извршава `else` блок. У конзоли ћете видети "Још увек не могу да приуштим нови лаптоп!"
✅ Тестирајте своје разумевање овог кода и следећег кода тако што ћете га покренути у конзоли претраживача. Промените вредности променљивих currentMoney и laptopPrice да бисте променили враћени `console.log()`.
## Switch израз
Понекад је потребно упоредити једну вредност са више опција. Иако бисте могли да повежете неколико `if..else` израза, овај приступ постаје незграпан. `switch` израз пружа чистију структуру за руковање више различитих вредности.
Концепт подсећа на механичке системе прекидача који су се користили у раним телефонским централама једна улазна вредност одређује који специфичан пут извршење следи.
```javascript
switch (expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
```
Ево како је структурисан:
- JavaScript процењује израз једном
- Прегледа сваки `case` да пронађе подударност
- Када пронађе подударност, извршава тај блок кода
- `break` каже JavaScript-у да престане и изађе из switch-а
- Ако ниједан случај не одговара, извршава `default` блок (ако га имате)
```javascript
// Program using switch statement for day of week
let dayNumber = 2;
let dayName;
switch (dayNumber) {
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
default:
dayName = "Unknown day";
break;
}
console.log(`Today is ${dayName}`);
```
У овом примеру, JavaScript види да је `dayNumber` `2`, проналази одговарајући `case 2`, поставља `dayName` на "Уторак", и затим излази из switch-а. Резултат? "Данас је уторак" се приказује у конзоли.
✅ Тестирајте своје разумевање овог кода и следећег кода тако што ћете га покренути у конзоли претраживача. Промените вредности променљиве a да бисте променили враћени `console.log()`.
## Логички оператори и Булове вредности
Комплексне одлуке често захтевају процену више услова истовремено. Као што Булова алгебра омогућава математичарима да комбинују логичке изразе, програмирање пружа логичке операторе за повезивање више Булових услова.
Ови оператори омогућавају сложену условну логику комбиновањем једноставних процена `true`/`false`.
| Симбол | Опис | Пример |
| ------ | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `&&` | **Логичко И**: Упоређује два Булова израза. Враћа true **само** ако су обе стране тачне | `(5 > 3) && (5 < 10) // Обе стране су тачне. Враћа true` |
| `\|\|` | **Логичко ИЛИ**: Упоређује два Булова израза. Враћа true ако је бар једна страна тачна | `(5 > 10) \|\| (5 < 10) // Једна страна је нетачна, друга је тачна. Враћа true` |
| `!` | **Логичко НЕ**: Враћа супротну вредност Буловог израза | `!(5 > 10) // 5 није веће од 10, па "!" чини да буде true` |
Ови оператори вам омогућавају да комбинујете услове на користан начин:
- И (`&&`) значи да оба услова морају бити тачна
- ИЛИ (`||`) значи да бар један услов мора бити тачан
- НЕ (`!`) обрће true у false (и обрнуто)
## Услови и одлуке са логичким операторима
Хајде да видимо ове логичке операторе у акцији са реалнијим примером:
```javascript
let currentMoney = 600;
let laptopPrice = 800;
let laptopDiscountPrice = laptopPrice - (laptopPrice * 0.2); // Laptop price at 20 percent off
if (currentMoney >= laptopPrice || currentMoney >= laptopDiscountPrice) {
// Condition is true. Code in this block will run.
console.log("Getting a new laptop!");
} else {
// Condition is false. Code in this block will run.
console.log("Can't afford a new laptop, yet!");
}
```
У овом примеру: израчунавамо цену са попустом од 20% (640), затим процењујемо да ли наша расположива средства покривају или пуну цену ИЛИ цену са попустом. Пошто 600 испуњава праг цене са попустом од 640, услов се процењује као тачан.
### Оператор негације
Понекад је лакше размишљати о томе када нешто НИЈЕ тачно. Као, уместо да питате "Да ли је корисник пријављен?", можда желите да питате "Да ли корисник НИЈЕ пријављен?" Узвичник (`!`) оператор обрће логику за вас.
```javascript
if (!condition) {
// runs if condition is false
} else {
// runs if condition is true
}
```
Оператор `!` је као да кажете "супротно од..." ако је нешто `true`, `!` га чини `false`, и обрнуто.
### Тернарни изрази
За једноставне условне доделе, JavaScript пружа **тернарни оператор**. Овај концизан синтакс омогућава вам да напишете условни израз у једном реду, корисно када треба да доделите једну од две вредности на основу услова.
```javascript
let variable = condition ? returnThisIfTrue : returnThisIfFalse;
```
Чита се као питање: "Да ли је овај услов тачан? Ако јесте, користи ову вредност. Ако није, користи ону вредност."
Испод је конкретнији пример:
```javascript
let firstNumber = 20;
let secondNumber = 10;
let biggestNumber = firstNumber > secondNumber ? firstNumber : secondNumber;
```
✅ Одвојите минут да прочитате овај код неколико пута. Да ли разумете како ови оператори функционишу?
Ево шта овај ред каже: "Да ли је `firstNumber` већи од `secondNumber`? Ако јесте, стави `firstNumber` у `biggestNumber`. Ако није, стави `secondNumber` у `biggestNumber`."
Тернарни оператор је само краћи начин да напишете овај традиционални `if..else` израз:
```javascript
let biggestNumber;
if (firstNumber > secondNumber) {
biggestNumber = firstNumber;
} else {
biggestNumber = secondNumber;
}
```
Оба приступа дају идентичне резултате. Тернарни оператор нуди концизност, док традиционална структура if-else може бити читљивија за сложене услове.
---
## 🚀 Изазов
Направите програм који је прво написан са логичким операторима, а затим га препишите користећи тернарни израз. Која синтакса вам више одговара?
---
## Изазов GitHub Copilot Agent 🚀
Користите режим Agent да бисте завршили следећи изазов:
**Опис:** Направите свеобухватан калкулатор оцена који демонстрира више концепата доношења одлука из ове лекције, укључујући if-else изразе, switch изразе, логичке операторе и тернарне изразе.
**Задатак:** Напишите JavaScript програм који узима нумеричку оцену ученика (0-100) и одређује њихову словну оцену користећи следеће критеријуме:
- A: 90-100
- B: 80-89
- C: 70-79
- D: 60-69
- F: Испод 60
Захтеви:
1. Користите if-else израз за одређивање словне оцене
2. Користите логичке операторе да проверите да ли је ученик положио (оцена >= 60) И има похвале (оцена >= 90)
3. Користите switch израз да пружите специфичне повратне информације за сваку словну оцену
4. Користите тернарни оператор да одредите да ли је ученик квалификован за следећи курс (оцена >= 70)
5. Укључите проверу уноса како бисте осигурали да је оцена између 0 и 100
Тестирајте свој програм са различитим оценама, укључујући граничне случајеве као што су 59, 60, 89, 90 и неважећи уноси.
Сазнајте више о [режиму агента](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) овде.
## Квиз после предавања
[Квиз после предавања](https://ff-quizzes.netlify.app/web/quiz/12)
## Преглед и самостално учење
Прочитајте више о многим операторима доступним кориснику [на MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators).
Прегледајте диван [преглед оператора од Josha Comeau-а](https://joshwcomeau.com/operator-lookup/)!
## Задатак
[Оператори](assignment.md)
---
**Одрицање од одговорности**:
Овај документ је преведен помоћу услуге за превођење вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу произаћи из коришћења овог превода.