Sobes.tech
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.