"Dynamically typed" 🆚 "Statically typed" tillar
Deyarli barcha dasturchilar yoki o'rganuvchilar dasturlash tillari haqida biror bir ma'lumot o'rganganlarida "dynamically typed" va "statically typed" kabi terminlarga guvoh bo'lishadi. Umuman olganda dasturlash tillarini ushbu ikkita toifa orqali ham guruhlashimiz mumkin (aslida juda ko'p xususiyatlarga ko'ra guruhlash mumkin). Birinchi eshitishdayoq tezda tushunib olish qiyin bo'lishi mumkin, ammo bu ikkalasi o'rtasidagi farq juda ham sezilarli va buni izohlashni juda ham soddalashtirish mumkin. Post esa aynan shu mavzuga bag'ishlangan.
Buni chuqurroq izohlashdan oldin dasturlash tillaridagi "type"lar(turlar, ma'lumot turlari ...) va "type checking" haqida qisqacha ma'lumotlarni keltirib o'tsam.
"Type"lar haqida ko'p gapirishga hojat ham bo'lmasa kerak, shunchaki ma'lumot turlari. U array, obyekt, string va hokazolar kabi bo'lishi mumkin. Dastur ichidagi matematik hisob kitoblarda satr(string) ko'rinishidagi ma'lumotlardan foydalanilmasligidek, ularning har biri o'ziga yarasha individual xususiyatlarga va ishlatilish holatlariga ega.
"Type checking" esa dastur kodidagi yuqoridagi ma'lumot turlarini tekshirish va verifikatsiyadan(tasdiq) o'tkazish jarayonidir. Bu xuddi kofega shakar yoki tuzdan qaysi birini qo'shishni tekshirishdek. Bu jarayon sizning dasturingizda kelib chiqishi mumkin bo'lgan xatoliklar sonini minimumga yaqinlashtirishga katta xissa qo'shadi. Aks holda kelajakda "sho'r kofe" ichib o'tirishingiz mumkin 😁
Ko'pchilik kompilyatsiya haqida eshitgan bo'lishi mumkin. Agar bilmaydiganlar bo'lsa eslataman: "bu siz-u biz yozgan kodni ya'ni inson o'qiy oladigan source kodni, mashina kodiga o'girish jarayonidir(0 va 1dan iborat bo'ladigan)".
"Statically typed" toifasidagi dasturlash tillaridagi koddagi o'zgaruvchilarning tipi(turi) yuqoridagi kompilyatsiya jarayonida 100% ma'lum bo'ladi. Ya'ni biror bir o'zgaruvchini e'lon qilish bilan birga, turini ko'rsatishingiz shart deb belgilangan(kod: string uzgaruvchi = "Mishaa", string tipidagi o'zgaruvchi e'lon qilindi). Agar o'zgaruvchining turini "xitrilik" yo'llari bilan kodning boshqa qismlarida o'zgartirishga uringan bo'lsangiz, kompilyator bu haqida xabar berib xatolikni chop etadi. Buning foydasi ko'proq kodingizni ishga tushuradigan mashina va kompilyatorga ko'proq. Ya'ni kod tezroq ishlaydi va kamroq xotiradan foydalanadi. C, C++, Go, Rust va shunga o'xshash tillarni bemalol misol tarzida keltira olamiz.
"Dynamically typed" toifasidagi tillarda esa yuqoridagilarning aksi. "Type checking"ga o'xshash protsesslar kod ishga tushishida boshlanadi(run time). Kod yozish davomida o'zgaruvchilarning tipini ko'rsatishimiz shart emas(kod: uzgaruvchi = "Sashaa", o'zgaruvchining tipini esa tilning o'zi aniqlab oladi). Ammo python'ga o'xshash tillarda siz tipni ko'rsatishingiz ham mumkin, ammo bu majburiy etib belgilanmagan (bu bilan statically typed bo'lib qolmaydi 😄) va pythonda tiplarni ko'rsatish orqali uni tezligini oshirishga ham erisha olmaysiz. Lekin siz python sintaksisiga superset bo'lmish Cython'dan(jython,kython,fython kabilarini ham qidirib ko'ring chiqib qolar 👀) foydalanishingiz mumkin agar xohlasangiz. Bu toifa tillarining asosiy foydali jihati dasturchilarga bo'lishi tayin, har safar tiplarni ko'rsatib o'tish hammaga ham yoqmaydi. Ko'plab zamonaviy dasturlash va "skripitng" tillari "dynamically typed" hisoblanadi. Bu toifa tillari sizni "debugging" jarayonida qiynashi tabiy holat. Ularni loyihani ishlab chiqishdagi vaqtni tejashlari hisobiga kechirib qo'yishimiz mumkin 😁 Python, javascript, dart, ruby kabilarni misol qilish mumkin.
@AbduazizPy
Deyarli barcha dasturchilar yoki o'rganuvchilar dasturlash tillari haqida biror bir ma'lumot o'rganganlarida "dynamically typed" va "statically typed" kabi terminlarga guvoh bo'lishadi. Umuman olganda dasturlash tillarini ushbu ikkita toifa orqali ham guruhlashimiz mumkin (aslida juda ko'p xususiyatlarga ko'ra guruhlash mumkin). Birinchi eshitishdayoq tezda tushunib olish qiyin bo'lishi mumkin, ammo bu ikkalasi o'rtasidagi farq juda ham sezilarli va buni izohlashni juda ham soddalashtirish mumkin. Post esa aynan shu mavzuga bag'ishlangan.
Buni chuqurroq izohlashdan oldin dasturlash tillaridagi "type"lar(turlar, ma'lumot turlari ...) va "type checking" haqida qisqacha ma'lumotlarni keltirib o'tsam.
"Type"lar haqida ko'p gapirishga hojat ham bo'lmasa kerak, shunchaki ma'lumot turlari. U array, obyekt, string va hokazolar kabi bo'lishi mumkin. Dastur ichidagi matematik hisob kitoblarda satr(string) ko'rinishidagi ma'lumotlardan foydalanilmasligidek, ularning har biri o'ziga yarasha individual xususiyatlarga va ishlatilish holatlariga ega.
"Type checking" esa dastur kodidagi yuqoridagi ma'lumot turlarini tekshirish va verifikatsiyadan(tasdiq) o'tkazish jarayonidir. Bu xuddi kofega shakar yoki tuzdan qaysi birini qo'shishni tekshirishdek. Bu jarayon sizning dasturingizda kelib chiqishi mumkin bo'lgan xatoliklar sonini minimumga yaqinlashtirishga katta xissa qo'shadi. Aks holda kelajakda "sho'r kofe" ichib o'tirishingiz mumkin 😁
Ko'pchilik kompilyatsiya haqida eshitgan bo'lishi mumkin. Agar bilmaydiganlar bo'lsa eslataman: "bu siz-u biz yozgan kodni ya'ni inson o'qiy oladigan source kodni, mashina kodiga o'girish jarayonidir(0 va 1dan iborat bo'ladigan)".
"Statically typed" toifasidagi dasturlash tillaridagi koddagi o'zgaruvchilarning tipi(turi) yuqoridagi kompilyatsiya jarayonida 100% ma'lum bo'ladi. Ya'ni biror bir o'zgaruvchini e'lon qilish bilan birga, turini ko'rsatishingiz shart deb belgilangan(kod: string uzgaruvchi = "Mishaa", string tipidagi o'zgaruvchi e'lon qilindi). Agar o'zgaruvchining turini "xitrilik" yo'llari bilan kodning boshqa qismlarida o'zgartirishga uringan bo'lsangiz, kompilyator bu haqida xabar berib xatolikni chop etadi. Buning foydasi ko'proq kodingizni ishga tushuradigan mashina va kompilyatorga ko'proq. Ya'ni kod tezroq ishlaydi va kamroq xotiradan foydalanadi. C, C++, Go, Rust va shunga o'xshash tillarni bemalol misol tarzida keltira olamiz.
"Dynamically typed" toifasidagi tillarda esa yuqoridagilarning aksi. "Type checking"ga o'xshash protsesslar kod ishga tushishida boshlanadi(run time). Kod yozish davomida o'zgaruvchilarning tipini ko'rsatishimiz shart emas(kod: uzgaruvchi = "Sashaa", o'zgaruvchining tipini esa tilning o'zi aniqlab oladi). Ammo python'ga o'xshash tillarda siz tipni ko'rsatishingiz ham mumkin, ammo bu majburiy etib belgilanmagan (bu bilan statically typed bo'lib qolmaydi 😄) va pythonda tiplarni ko'rsatish orqali uni tezligini oshirishga ham erisha olmaysiz. Lekin siz python sintaksisiga superset bo'lmish Cython'dan(jython,kython,fython kabilarini ham qidirib ko'ring chiqib qolar 👀) foydalanishingiz mumkin agar xohlasangiz. Bu toifa tillarining asosiy foydali jihati dasturchilarga bo'lishi tayin, har safar tiplarni ko'rsatib o'tish hammaga ham yoqmaydi. Ko'plab zamonaviy dasturlash va "skripitng" tillari "dynamically typed" hisoblanadi. Bu toifa tillari sizni "debugging" jarayonida qiynashi tabiy holat. Ularni loyihani ishlab chiqishdagi vaqtni tejashlari hisobiga kechirib qo'yishimiz mumkin 😁 Python, javascript, dart, ruby kabilarni misol qilish mumkin.
@AbduazizPy