I chorak · Veb dasturlash
Sonlar va amallar
Kompyuter endi hisoblay boshlaydi
I chorak · Veb dasturlash
Kompyuter endi hisoblay boshlaydi
Ushbu darsdan keyin siz:
+, -, *, /, %) qo'llay olasiz va
qaysi amal birinchi bajarilishini bilasiz;prompt bilan foydalanuvchidan son so'rab, javobni Number()
yordamida songa aylantira olasiz.O'tgan darsda biz faqat tayyor sonlarni chiqardik: 7 * 8 yozsak,
56 chiqardi. Bu darsdan keyin dasturingiz o'zi hisoblaydi va
foydalanuvchi bergan songa qarab boshqacha javob beradi.
Har bo'limda avval o'zingiz qilib ko'rasiz, keyin nima bo'lganini sxemada ko'rasiz, oxirida qoidasini o'qiysiz.
| Nima | Izoh |
|---|---|
| Brauzer | Chrome yoki Edge — konsol uchun |
| Matn muharriri | VS Code yoki Bloknot |
| O'tgan darsdagi papka | birinchi-sahifa ichida birinchi.html va kod.js |
O'tgan darsdagi ikkita fayl yo'q bo'lsa, xavotir olmang: 3-bo'limda ular to'liq qayta beriladi, nusxa olib ishlatasiz.
Bu darsda hech qanday yangi dastur o'rnatilmaydi.
Brauzerda istalgan sahifani oching va F12 bilan konsolni oching.
Console yorlig'ida quyidagini yozib Enter bosing:
let narx = 12000;
Konsol javob o'rniga undefined deb yozadi — bu xato emas,
pastda tushuntiramiz. Endi shunchaki nomni yozing va Enter bosing:
narx
Endi shu nom bilan hisoblang:
console.log(narx * 3);
Skrinshot kutilmoqdaKonsolda o'zgaruvchi yaratish va ishlatish
Tekshirib ko'ring: uchinchi qadamda 12000, to'rtinchisida 36000
chiqdi. Demak narx degan nom haqiqatan 12000 sonini eslab qolgan.
Nega undefined chiqdi? Konsol har bir qatordan keyin "bu qator
qanday qiymat berdi?" deb yozadi. let narx = 12000; — bu buyruq
qiymat bermaydi, u faqat qiymatni saqlaydi. Shuning uchun konsol
"qiymat yo'q" degan ma'noda undefined yozadi. Saqlash esa amalga
oshgan — buni keyingi qatorda ko'rdingiz.
O'zgaruvchini nomi yozilgan quti deb tasavvur qiling. let narx = 12000;
qatori ikki ish qiladi:
narx degan yorliqli bo'sh quti yasaydi;12000 sonini qo'yadi.Shundan keyin kodning istalgan joyida narx deb yozsangiz, brauzer
qutini ochib ichidagi sonni oladi. Ya'ni narx * 3 aslida 12000 * 3
bo'lib bajariladi.
Qiymatni almashtirsangiz — narx = 15000; — quti o'zi o'sha quti
bo'lib qolaveradi, faqat ichidagi son almashadi. Eski qiymat hech
qayerda saqlanmaydi, u butunlay yo'qoladi. Kerak bo'lsa, uni oldindan
boshqa qutiga ko'chirib qo'yish kerak.
O'zgaruvchi ikki so'z bilan e'lon qilinadi:
let narx = 12000;
const soliq = 12;
| Bo'lak | Vazifasi |
|---|---|
let |
"yangi quti yasa" degan so'z |
narx |
qutining nomi — o'zingiz o'ylab topasiz |
= |
"ichiga shuni qo'y" degan belgi, tenglik emas |
12000 |
qutiga qo'yiladigan qiymat |
; |
buyruq shu yerda tugadi |
= belgisi tenglik emas. Matematikada x = 5 — "x bilan 5 teng"
degani. JavaScriptda esa x = 5 — "5 ni x qutisiga qo'y" degan
buyruq. Shuning uchun narx = narx + 1000 degan qator mantiqsiz
emas: o'ng tomon avval hisoblanadi (13000), keyin natija yana narx
qutisiga qo'yiladi.
let faqat bir marta yoziladi. Qiymatni almashtirganda let
takrorlanmaydi:
let narx = 12000; // yaratildi
narx = 15000; // almashtirildi — let YO'Q
Ikkinchi marta let narx deb yozsangiz, brauzer
SyntaxError: Identifier 'narx' has already been declared deb xato
beradi — "bunday nomli quti allaqachon bor" degani.
Konsol bu qoidani yumshatadi. Chrome va Edge konsolida let narx
ni ikki marta yozsangiz xato chiqmaydi — konsol mashq maydoni bo'lgani
uchun oxirgi qiymatni qabul qilaveradi. Xato kod.js kabi fayllarda
ko'rinadi. Shuning uchun bu qoidani konsolda emas, fayl ustida sinang.
const — o'zgarmaydigan quti. Qiymat butun dastur davomida bir xil
qoladigan bo'lsa (soliq foizi, sinfdagi o'quvchilar soni), let o'rniga
const yoziladi:
const soliq = 12;
soliq = 15; // TypeError: Assignment to constant variable.
Bu — himoya chorasi. Qiymat adashib almashib ketmasligi kerak bo'lsa,
const yozing; keyinchalik o'zgarishi aniq bo'lsa — let.
Nom qanday tanlanadi. Qoidalar qat'iy:
| Qoida | To'g'ri | Xato |
|---|---|---|
| Harf bilan boshlanadi | narx2 |
2narx |
| Bo'sh joy bo'lmaydi | jamiNarx |
jami narx |
| Katta-kichik harf farqlanadi | narx va Narx — ikki xil quti |
— |
| Apostrof bo'lmaydi | narxi |
narx' |
| Band so'zlar ishlatilmaydi | qiymat |
let, const, class |
Kirill harflari bilan yozilgan nom (сони) aslida ishlaydi —
brauzer uni qabul qiladi va xato bermaydi. Shunga qaramay biz faqat
lotin harflaridan foydalanamiz: kod yozayotganda klaviatura tilini
almashtirib o'tirish ishni sekinlashtiradi. Apostrof esa haqiqatan
xato — narx' deb yozsangiz SyntaxError chiqadi.
Ikki so'zli nom kerak bo'lsa, ikkinchi so'z katta harf bilan
boshlanadi: jamiNarx, birNarx, qutiSoni. Bu — JavaScriptda
qabul qilingan yozuv usuli, uni camelCase deb atashadi.
Nomni mazmunli tanlang. a, b, x1 degan nomlar bugun tushunarli,
bir haftadan keyin esa nima saqlanayotgani esdan chiqadi. narx,
soni, jami — kod o'zini o'zi tushuntiradi.
Sahifani F5 bilan yangilang — eski o'zgaruvchilar o'chadi va toza boshlaymiz. Ikkita o'zgaruvchi yarating:
let narx = 12000;
let soni = 7;
Endi to'rtta qatorni birin-ketin yozing:
console.log(narx * soni);
console.log(narx + 2000);
console.log(soni / 2);
console.log(soni % 3);
Skrinshot kutilmoqdaKonsolda arifmetik amallar natijasi
Tekshirib ko'ring: 84000, 14000, 3.5 va 1 chiqdi. Uchinchi
javob butun son emas — bu normal. To'rtinchisi esa 7 ni 3 ga bo'lgandagi
qoldiq: 7 = 3 + 3 + 1, ortib qolgani 1.
Brauzer ifodani chapdan o'ngga o'qiydi, lekin hammasini navbati bilan bajarmaydi — avval kuchliroq amallarni tanlab oladi.
2 + 3 * 4 ifodasida:
3 * 4 hisoblanadi → 12;2 + 12 hisoblanadi → 14.Javob 20 emas, 14. Xuddi matematikadagi kabi: ko'paytirish
qo'shishdan kuchli.
Qavs bu tartibni buzadi: (2 + 3) * 4 da avval qavs ichi hisoblanadi
(5), keyin ko'paytiriladi (20).
Beshta amal bor:
| Amal | Nomi | Misol | Natija |
|---|---|---|---|
+ |
qo'shish | 12000 + 2000 |
14000 |
- |
ayirish | 12000 - 2000 |
10000 |
* |
ko'paytirish | 12000 * 7 |
84000 |
/ |
bo'lish | 7 / 2 |
3.5 |
% |
qoldiq | 7 % 3 |
1 |
/ har doim aniq javob beradi. Ba'zi tillarda 7 / 2 butun son
(3) chiqadi, JavaScriptda esa 3.5. Kasr qismi vergul bilan emas,
nuqta bilan yoziladi: 3.5, 0.25. Vergul qo'ysangiz brauzer uni
ikkita alohida son deb o'qiydi.
% — bo'lishdan qolgan qoldiq. Nomi foizga o'xshaydi, lekin
foizga hech qanday aloqasi yo'q:
| Ifoda | Ma'nosi | Natija |
|---|---|---|
24 % 5 |
24 ta narsa 5 tadan qutiga joylandi | 4 ortdi |
20 % 5 |
20 ta narsa 5 tadan qutiga joylandi | 0 — hammasi sig'di |
7 % 3 |
7 ni 3 ga bo'lgandagi qoldiq | 1 |
Qoldiq nolga teng bo'lsa — son butunlay bo'linadi. Bu keyinchalik juft va toq sonlarni ajratishda asosiy usul bo'ladi.
Amallar tartibi — ikki daraja:
| Navbat | Amallar |
|---|---|
| Birinchi | * / % |
| Ikkinchi | + - |
Bir darajadagi amallar chapdan o'ngga bajariladi. Qavs esa hammasidan kuchli: qavs ichidagisi doim birinchi hisoblanadi.
Amalda bu shunday ko'rinadi:
let narx = 12000;
let soni = 7;
console.log(narx + 2000 * soni); // 26000
console.log((narx + 2000) * soni); // 98000
Birinchi qatorda 2000 * 7 = 14000 hisoblanib, ustiga 12000 qo'shildi.
Ikkinchisida esa narx avval 14000 ga ko'tarildi, keyin 7 ga
ko'paytirildi. Ikkinchisi to'g'ri javob — har bir daftarga ustama
qo'shilishi kerak edi. Bitta juft qavs javobni 72 000 so'mga o'zgartirdi.
Shuning uchun qoida oddiy: shubha bo'lsa — qavs qo'ying. Ortiqcha qavs xato emas, u faqat niyatingizni ochiq ko'rsatadi.
E'tibor bering: kasr sonlarda kichik xatolik bo'ladi. Konsolda
0.1 + 0.2 ni yozib ko'ring — javob 0.3 emas, 0.30000000000000004
chiqadi. Sabab: kompyuter sonlarni ikkilik sanoq sistemasida saqlaydi
va 0.1 u yerda aniq ifodalanmaydi. Bu xato emas, hamma dasturlash
tillarida shunday. Pul hisobida shuning uchun so'mni butun son sifatida
saqlash qulayroq. Kasrni chiroyli ko'rsatish usulini 12-darsda
o'rganamiz.
Hozirgacha sonlarni biz yozdik. Endi ularni dastur ishlab turgan paytda foydalanuvchidan so'raymiz.
O'tgan darsdagi papkani oching. Fayllar yo'q bo'lsa, hisob degan yangi
papka yarating va ikkita fayl yasang.
hisob.html:
<!DOCTYPE html>
<html lang="uz">
<head>
<meta charset="UTF-8">
<title>Hisob-kitob</title>
</head>
<body>
<h1>Kalkulyator</h1>
<script src="kod.js"></script>
</body>
</html>
kod.js — xuddi shu papkada:
let a = Number(prompt("Birinchi sonni kiriting:"));
let b = Number(prompt("Ikkinchi sonni kiriting:"));
alert("Yig'indisi: " + (a + b));
Endi hisob.html ni brauzerda oching.
Skrinshot kutilmoqdaSahifa ochilganda chiqqan prompt oynasi
Tekshirib ko'ring: ketma-ket ikkita savol oynasi chiqdi. 5 va 3
kiriting — oxirida Yig'indisi: 8 yozuvli oyna paydo bo'ladi.
Kodni o'zgartirsangiz, sahifani F5 bilan yangilashni unutmang — aks holda eski natijani ko'rasiz.
prompt oynasi nimani qaytarishini bilish muhim: u har doim matn
qaytaradi, siz raqam yozgan bo'lsangiz ham. 5 deb yozsangiz, u
"5" — ya'ni ichida 5 raqami turgan matn.
Matn bilan qo'shish amali boshqacha ishlaydi. + belgisi ikki tomonda
matn ko'rsa, ularni qo'shmaydi, bir-biriga ulaydi:
| Ifoda | Natija | Nega |
|---|---|---|
5 + 3 |
8 |
ikkalasi ham son |
"5" + "3" |
"53" |
ikkalasi ham matn — ulandi |
Number("5") + Number("3") |
8 |
matn songa aylantirildi |
Shuning uchun Number() yozamiz: u matn ichidagi raqamni haqiqiy songa
aylantiradi. Bir marta aylantirilgandan keyin barcha amallar odatdagidek
ishlaydi.
Buni o'zingiz ko'ring: kod.js dagi ikkala Number( va yopuvchi
qavsni olib tashlang, sahifani yangilab yana 5 va 3 kiriting.
Natija 8 emas, 53 chiqadi.
let a = Number(prompt("Birinchi sonni kiriting:"));
Bu qatorni ichkaridan tashqariga qarab o'qing:
| Bo'lak | Nima qiladi |
|---|---|
prompt("...") |
oyna chiqaradi, yozilgan javobni matn ko'rinishida qaytaradi |
Number(...) |
matnni songa aylantiradi |
let a = |
natijani a qutisiga qo'yadi |
Qavslar ichma-ich yoziladi. Number(prompt("...")) da ikkita yopuvchi
qavs bor va ularning tartibi muhim. Ochilgan har bir qavs yopilishi
kerak — VS Code buni rang bilan ko'rsatadi.
alert ichida matn va sonni birga chiqarish. Natijani izohi bilan
ko'rsatmoqchi bo'lsangiz, matnni + bilan ulaysiz — lekin sonlarni
oldin qavs ichida hisoblab olish kerak:
alert("Yig'indisi: " + (a + b)); // Yig'indisi: 8
alert("Yig'indisi: " + a + b); // Yig'indisi: 53
Ikkinchi qatorda qavs yo'q, shuning uchun + chapdan o'ngga ishlaydi:
avval "Yig'indisi: " matniga 5 ulanadi, keyin natijaga 3 ulanadi.
Bu — 2-bo'limdagi amallar tartibi qoidasining aynan o'zi, faqat bu
safar matn ustida.
Foydalanuvchi son yozmasa nima bo'ladi? Number("salom") natijasi
NaN bo'ladi — Not a Number, "son emas" degani. Undan keyingi barcha
hisoblar ham NaN chiqadi. Foydalanuvchi Bekor qilish (Cancel)
tugmasini bossa, prompt null qaytaradi va Number(null) 0 beradi.
Bunday holatlarni tekshirishni 4-darsda, shart operatorlarida
o'rganamiz.
prompt qayerda ishlaydi. U faqat brauzerda ochilgan sahifada
ishlaydi. Ketma-ket ko'p oyna chiqarsangiz, Chrome
"Bu sahifa boshqa oyna chiqarmasin" degan katakcha ko'rsatadi — uni
belgilab qo'ysangiz, prompt boshqa chiqmaydi. Tuzatish uchun sahifani
yopib qaytadan oching.
| Xato | Nima ko'rinadi | Sabab | Yechim |
|---|---|---|---|
let ikki marta |
Identifier 'narx' has already been declared |
faylda bitta nom ikki marta e'lon qilingan | ikkinchi qatordan let ni olib tashlang |
const ga qayta yozish |
Assignment to constant variable |
const qiymati o'zgartirilmoqchi |
let bilan e'lon qiling |
| Nom noto'g'ri yozilgan | narx is not defined |
Narx, narxx yoki hali yaratilmagan |
nomni harfma-harf solishtiring |
| Qo'shish o'rniga ulash | 53 chiqadi, 8 emas |
Number() yozilmagan |
Number(prompt(...)) |
| Kasr vergul bilan | kutilmagan natija | 3,5 deb yozilgan |
nuqta ishlating: 3.5 |
| Kasrda uzun dum | 0.30000000000000004 |
ikkilik sanoq sistemasi | xato emas, hozircha e'tibor bermang |
| Qavs unutilgan | ustama noto'g'ri hisoblanadi | narx + 2000 * soni |
(narx + 2000) * soni |
| Matn son bilan ulanib ketdi | Yig'indisi: 53 |
"matn" + a + b |
"matn" + (a + b) |
| Son o'rniga matn kiritilgan | NaN |
Number("salom") |
raqam kiriting |
| Oyna chiqmay qoldi | prompt ishlamaydi | "boshqa oyna chiqarmasin" belgilangan | sahifani yopib qaytadan oching |
| Kod o'zgardi, natija eski | eski javob chiqaveradi | sahifa yangilanmagan | F5 bosing |
let nom = qiymat; — nomi bor qutiga qiymat qo'yadi= tenglik emas, "ichiga qo'y" degan buyruqlet takrorlanmaydiconst — o'zgarmaydigan qiymat uchunjamiNarx+ - * / %* / % — birinchi, + - — ikkinchi, qavs hammasidan kuchli/ kasr javob beradi (7 / 2 → 3.5), kasr nuqta bilan% — bo'lishdan qolgan qoldiq, foiz emasprompt har doim matn qaytaradiNumber() matnni songa aylantiradi — bo'lmasa "5" + "3" → "53"Bu darsda ikki topshiriq bor, ikkalasi ham shu qo'llanmadagi materialdan chiqadi:
let bilan
o'zgaruvchi yaratish, jami summani va qavsli ustama hisobini
chiqarish, % bilan qoldiqni topish.prompt bilan
ikkita son so'rab, sizga tegishli amalni qo'llash.Topshiriq matni shu sahifaning pastida — jurnaldagi raqamingizni tanlaganingizdan keyin chiqadi. Har kimda o'z buyumi, o'z narxi va o'z amali bo'ladi.
Skrinshot qanday olinadi? Win + Shift + S bosing, kerakli qismni
belgilang, so'ng Word yoki Paint'ga Ctrl + V bilan qo'ying. Kod
skrinshotida fayl nomi ham ko'rinib tursin.
Ikkinchi topshiriqda qavslarni sanang: Number(prompt("...")) da ikkita
qavs ochiladi va ikkalasi ham yopilishi kerak. Eng ko'p vaqt aynan shu yerda yo'qoladi.
Endi sonlar bilan ishlay olamiz, lekin matn hali "shunchaki matn": uni birlashtirishdan boshqa hech narsa qila olmaymiz. Ism kiritilganda uning uzunligini bilish, harflarni katta qilish, matn ichidan bo'lak ajratib olish — bularning hech biri hozircha qo'limizdan kelmaydi.
Keyingi darsda satrli qiymatlar bilan tanishamiz: matn ustida
qanday amallar borligini va bugun ko'rgan "5" + "3" hodisasining
to'liq sababini ko'ramiz.
Ro'yxatdagi tartib raqamingizni tanlang — shaxsiy topshiriq shu yerda chiqadi. Bir marta tanlaysiz, brauzer eslab qoladi.