Middle+
F# tilida funksional dasturlash nima?
sobes.tech AI
AIdan javob
F# — bu ko‘p paradigmalik til, ammo uning asosiy qismi funksional dasturlashga asoslangan. Bu shuni anglatadiki, F# dagi dasturlar asosan "toza" funksiyalar atrofida qurilgan bo‘lib, ular yon ta’sirlar qilmaydi va har doim bir xil kirish ma’lumotlari bilan bir xil natijani qaytaradi. Asosiy tushunchalar quyidagilardan iborat:
- O‘zgarmaslik (Immutability): Standart holatda, F# dagi ma’lumotlar o‘zgarmas. O‘zgaruvchilar (bindings) bo‘lib, ularning qiymatlari yaratilgandan keyin o‘zgartirilmaydi. Bu dastur haqida fikr yuritishni soddalashtiradi va ko‘p ipli muhitlarda xavfsizlikni oshiradi.
- Funksiyalar birinchi darajali obyektlar sifatida: Funksiyalar o‘zgaruvchilarga tayinlanishi, boshqa funksiyalarga argument sifatida uzatilishi va funksiyalardan qaytarilishi mumkin.
- Kurrikatsiya (Currying): F# dagi funksiyalar faqat bitta argument qabul qiladi. Bir nechta argument qabul qiladigan funksiyalar avtomatik tarzda, har biri bitta argument qabul qiladigan funksiyalar ketma-ketligiga aylantiriladi.
- Shablon moslash (Pattern Matching): Ma’lumotlarni bo‘laklarga ajratish va ularning tuzilishiga qarab harakat qilish uchun kuchli qurilma.
- Turlarni aniqlash (Type Inference): F# kompilyatori ko‘pgina ifodalar turlarini avtomatik aniqlay oladi, bu esa aniq turlarni belgilash ehtiyojini kamaytiradi.
- Ifodalar (Expressions): F# dagi ko‘pgina tuzilmalar ifodalar bo‘lib, qiymatni qaytaradi. Bu kodni qisqaroq yozishga imkon beradi.
F# faol tarzda algebraik ma’lumot turlaridan (ATD) foydalanadi:
- Qaydlar (Records): nomlangan maydonlarga ega o‘zgarmas ma’lumot turlari.
- Diskriminatsiyalangan birliklar (Discriminated Unions): bir nechta mumkin bo‘lgan qiymatlarni ifodalovchi ma’lumot turlari, har biri bog‘langan ma’lumotlarga ega bo‘lishi mumkin. Ular yakuniy holatlar yoki variantlarni modellashtirish uchun ishlatiladi.
// O‘zgarmas qayd misoli
type Person = { Name: string; Age: int }
// Diskriminatsiyalangan birlik misoli
type Shape =
| Circle of radius: float
| Rectangle of width: float * height: float
// Shablon moslash bilan funksion misol
let calculateArea shape =
match shape with
| Circle r -> System.Math.PI * r * r
| Rectangle (w, h) -> w * h
F# dagi funksional yondashuv modulli, sinovdan o‘tishga oson va parallel ishlashga mos dasturlar yaratishni rag‘batlantiradi.