Bugun biz funksional dasturlash mavzusi haqida, ya'ni deklarativ va imperativ dasturlash orasidagi farqlarni ko'rib chiqamiz.
Avvaliga tezda terminlar bilan tanishamiz, keyin esa bu dasturlash uslublarini solishtirib ko'ramiz va ular Java'da qanday aks ettiriladi va bu til ichida birga ishlay oladimi yoki yo'qmi ko'rib chiqamiz.
Funksional dasturlash — bu dasturlash paradigmasi bo'lib, unda hisoblash jarayoni, dasturlash paradigmasida bo'lgani kabi funksiyalar qiymatlarini hisoblash orqali belgilanadi, ya'ni prosedur dasturlashda. Boshqacha aytganda, bu ikki paradigmalarda "funksiya" so'zi turli xil talqin etiladi. Buni esda saqlash va adashtirmaslik kerak. Java tilida bu bilan adashib ketmaysiz: protseduralardagi "funksiya" bu "metodlar", va matematik funksiyalar sifatida "funksiyalar" (ya'ni: lambda-functions yoki method reference).
Amalda, prosedur dasturlashda funksiyalar nafaqat kiruvchi o'zgaruvchilarga, balki tashqi omillarga (masalan, funksiyadan tashqaridagi boshqa o'zgaruvchilar yoki tizim holatiga) ham bog'liq bo'ladi. Shu sababli, bir xil argumentlar bilan chaqirilgan bir xil funksiya turli kontekstlarda turli natijalar berishi mumkin. Funksional dasturlashda esa, bir xil argumentlar bilan funksiya chaqirilganda doimo bir xil natija olinadi, chunki funksiyalar faqat kiruvchi ma'lumotlarga bog'liq.
Funksional dasturlashning ijobiy tomonlari
- Kod ishonchliligini oshirish
- Modulli testlashni tashkil etish qulayligi
- Kodni kompilatsiya paytida optimallashtirish imkoniyatlari
- Parallelizm imkoniyatlari
Funksional dasturlashning salbiy tomonlari
Funksional dasturlashning kamchiliklari ham uning ayni xususiyatlaridan kelib chiqadi:
Yangi ma'lumotlar yaratish va ularni doimiy ravishda ajratib olish va avtomatik ravishda ozod qilish zarurati tufayli doimiy xotira ajratish va avtomatik ozod qilish zarurati paydo bo'ladi. Shuning uchun funksional dasturlarni ishlatish tizimida yuqori samarali axlat to'plagich muhim komponent bo'ladi.
Hisoblash modelining noaniqligi funksiya chaqiruvlarining kutilmagan tartibda chaqirilishiga olib keladi, bu esa kirish-chiqishda muammolarni keltirib chiqaradi, bunda amallarni bajarish tartibi muhimdir.
Funksional dasturlash bo'yicha qisqacha eslatma tugadi, endi to'g'ridan-to'g'ri dasturlash uslublariga o'tamiz.
Imperativ dasturlash — bu dasturlash paradigmasi bo'lib, quyidagi xususiyatlar bilan ajralib turadi:
Dastur kodida buyruqlar (ko'rsatmalar) yoziladi.
Ko'rsatmalar ketma-ket bajarilishi kerak.
Oldingi ko'rsatmalarning bajarilishi natijasida olingan ma'lumotlar keyingi ko'rsatmalar tomonidan o'qilishi mumkin.
Ko'rsatma bajarilishi natijasida olingan ma'lumotlar xotiraga yozilishi mumkin.
Imperativ tillarning asosiy xususiyatlari:
- Nomlangan o'zgaruvchilardan foydalanish.
- O'zlashtirish operatoridan foydalanish.
- Kompozit ifodalardan foydalanish.
- Protseduralardan foydalanish.
Imperativ dastur buyruqlar va ko'rsatmalar ketma-ketligini bildirish kabi tabiat beradi.
C, C++ kabi dasturlash tillari imperativ tillarga kiradi.
Deklarativ dasturlash — bu dasturlash paradigmasi bo'lib, unda muammoning yechimi aniqlanadi, ya'ni natija qanday bo'lishi kerakligi tasvirlanadi, qanday qilib unga erishish kerakligi emas. Deklarativ tillarga misol sifatida HTML markup tilini keltirish mumkin. Bu tilda teglar yozayotganda, elementlar sahifada qanday aks ettirilishi haqida o'ylamaymiz, faqat sahifa qanday ko'rinishda bo'lishi kerakligini tasvirlaymiz.
Boshqa deklarativ dasturlash tili - SQL.
Ikki yondashuvni solishtirish uchun, real hayotdan misol ko'rib chiqamiz: qanday qilib bir kishiga qanday qilib ma'lum bir joyga borishni tushuntiramiz?
Tasavvur qiling, ko'chada bir kishi bizga kelib, "Muzey N ga qanday borish mumkin?" deb so'radi.
Imperativ yondashuvda biz unga piyoda qanday borish algoritmini tushuntirar edik:
- hozir orqaga buril
- 2 mahallani to'g'ri bor
- o'ngga buril
- …
Deklarativ yondashuvda esa biz shunchaki manzilni aytamiz, va u o'z kuchi (vositalari) bilan kerakli joyga yetib oladi.
Java hozirda multidasturlash paradigmasi ga ega dasturlash tili hisoblanadi. Multidasturlash paradigmasi, til bir nechta paradigmani qo'llab-quvvatlashini bildiradi.
O'zining uzoq rivojlanish davrida til o'zining obyektga yo'naltirilgan modelini kengaytirdi, shunda uning foydalanuvchilari turli vositalarni olishlari va har bir konkret muammoning yechimiga eng yaxshi vositani tanlashlari mumkin bo'ldi.
Shuning uchun Java hozirda imperativ (masalan, metod chaqiruvi yozish) va deklarativ yondashuvlarni (masalan, Runtime'da mavjud bo'lgan annotatsiyalar) qo'llab-quvvatlaydi.
Xulosa qilamiz:
Turli dasturlash paradigmalari mavjud.
Deklarativ va imperativ yondashuvlar mavjud.
Qaysi biri muayyan vazifalarni eng yaxshi bajarishini tanlash kerak.
Java — ikkala yondashuvni qo'llab-quvvatlovchi multidasturlash tillaridan biridir.
GO TO FULL VERSION