Sof funktsiyalardan foydalangan holda qanday qilib do'konni yaratish kerak

Discover Funktsional JavaScript BookA Authority tomonidan yaratilgan eng yaxshi yangi Funktsional dasturlash kitoblaridan biri deb topildi!

Unsplash-da Ugur Akdemir surati

Sof funktsiyalar bir xil kirishni hisobga olgan holda bir xil chiqish qiymatini hosil qiladi. Ularning yon ta'siri yo'q va o'qish, tushunish va sinash osonroq.

Bularning barchasini inobatga olgan holda, men davlatni yashiradigan, shu bilan birga sof funktsiyalardan foydalanadigan do'kon yaratmoqchiman.

O'zgarmaslik

Sof funktsiyalar kirishlarini o'zgartirmaydi. Ular kirish qiymatlarini o'zgarmas deb hisoblashadi.

O'zgarib bo'lmaydigan qiymat, bir marta yaratilgan, o'zgarib bo'lmaydigan qiymatdir.

Immutable.js List kabi o'zgarmas ma'lumotlar tuzilishini ta'minlaydi. O'zgarmas ma'lumotlar tuzilishi har bir harakatda yangi ma'lumotlar tuzilishini yaratadi.

Keyingi kodni ko'rib chiqing:

"o'zgarmas" dan {List} ni import qilish;
const list = Ro'yxat ();
const newList = list.push (1);

push () yangi elementga ega bo'lgan yangi ro'yxatni yaratadi. Mavjud ro'yxatni o'zgartirmaydi.

delete () ko'rsatilgan indeksdagi element olib tashlangan yangi ro'yxatni qaytaradi.

Ro'yxat ma'lumotlari tuzilmasi ro'yxatlar bilan doimiy ravishda ishlash uchun yoqimli interfeysni taklif etadi, shuning uchun men uni davlat qiymati sifatida ishlataman.

Do'kon

Do'kon holatni boshqaradi.

Shtat o'zgarishi mumkin bo'lgan ma'lumotlar. Do'kon ushbu davlat ma'lumotlarini yashiradi va u bilan ishlashning ommaviy usullarini taklif qiladi.

Add (), remove () va getBy () usullari yordamida kitoblar do'konini yaratmoqchiman.

Men bu funktsiyalarning barchasi sof funktsiyalar bo'lishini xohlayman.

Do'kon tomonidan ishlatiladigan ikkita toza funktsiyalar mavjud:

  • holatni o'qish va filtrlash funktsiyalari. Men ularni oluvchilar deb atayman.
  • holatni o'zgartiradigan funktsiyalar. Men ularni setters deb atayman.

Ikkala turdagi funktsiyalar ham davlatni birinchi parametr sifatida qabul qiladi.

Sof funktsiyalardan foydalanib, do'konga yozaylik.

"o'zgarmas" dan {List} ni import qilish;
qisman "lodash / qisman" dan import qilish;
gugurtlarProperty-ni "lodash / matchProperty" dan import qilish;
// sozlovchilar
function add (kitoblar, kitoblar) {
  return books.push (kitob);
}
funktsiya olib tashlash (kitoblar, kitob) {
  const index = books.findIndex (matchProperty ("id", book.id));
  return books.delete (indeks);
}
// oluvchilar
queryContainsBook funktsiyasi (so'rov, kitob) {
  if (query && query.text) {
    return book.title.includes (query.text);
  }
  haqiqiy qaytish;
}
getBy funktsiyasi (kitoblar, so'rovlar) {
  return books.filter (qisman (queryContainsBook, query)) .Array ();
}

Kutubxona

Davlat do'kon ob'ektining ichida yashirin bo'lishi kerak. Men davlatni tashqi tomondan do'kon ob'ektiga yuborishni xohlamayman. Shu bilan birga, men sof funktsiyalarning barcha afzalliklariga ega bo'lishni va ulardan do'kon usullarini aniqlashda foydalanishni xohlayman.

Bunga qanday erishish mumkin?

Javobni Reduxda ko'rdik. Biz sof funktsiyalarni yozamiz va kutubxonaga do'kon yaratishga va sof funktsiyalarni bajarishga ruxsat beramiz.

Do'konni aniqlash uchun kutubxonadan qanday foydalanishni xohlayman:

"o'zgarmas" dan {List} ni import qilish;
"./Store-toolbox" dan do'konni import qilish;
// sozlovchilar
funktsiya qo'shish (kitoblar, kitob) {}
funktsiya olib tashlash (kitoblar, kitob) {}
// oluvchilar
getBy funktsiyasi (kitoblar, so'rov) {}
eksport qilish uchun odatiy do'kon ({
  holat: Ro'yxat (),
  sozlovchilar: {qo'shish, olib tashlash},
  kirishchilar: {getBy}
});

Keling, mikroto'lqinli pechka va paxtakorlarga asoslanib do'konni yaratadigan ushbu mikro-kutubxonani quraylik.

Barcha ochiq kirish va o'rnatish moslamalari bezatiladi va birinchi parametr sifatida davlatni oladi.

  • Qaytish qiymati qo'ng'iroq qiluvchining funktsiyalariga qaytariladi.
  • Stetters-dan qaytarilgan qiymat holatni o'zgartirish uchun ishlatiladi. Qo'ng'iroq qiluvchining vazifalari yangi holatni olmaydi.
funktsiya decorateMethods (obj, decorator) {
  let newObject = {... obj};
  Object.keys (newObject) .forEach (decorateMethod (fnName) funktsiyasi {
    if (newObject [fnName] === "funktsiya") {
      newObject [fnName] = bezatuvchi (newObject [fnName]);
    }
  });
  return newObject;
}
funktsiya Store (storeConfig) {
  return funktsiya () {
    let state = storeConfig.state;
    funktsiya o'rnatuvchisi (fn) {
      return funktsiya (... args) {
        holat = fn (holat, ... args);
      };
    }
    funktsiya getter (fn) {
      return funktsiya (... args) {
        return fn (holat, ... args);
      };
    }
    return Object.freeze ({
      ... bezatishMetodlar (shopConfig.getters, getter),
      ... bezatishMetodlar (do'konConfig.setters, setter)
    });
  };
}
standart do'konni eksport qilish;

Store () holatni inkapsullaydigan ob'ektni qaytaradigan funktsiyani yaratadi.

BookStore ob'ekti yarataylik va undan foydalanaylik:

BookStore-ni "./BookStore" dan import qilish;
const bookStore = BookStore ();
bookStore.add ({id: 1, sarlavha: "JavaScript qanday ishlaydi"});

BookStore.add ({}) ni chaqirganda, setter dekoratori birinchi parametr sifatida joriy holat bilan add () toza setter funktsiyasini, ikkinchi kitob sifatida esa yangi kitobni chaqiradi. Keyin, sozlash vositasi natijadan foydalanib, davlatning qiymatini o'zgartiradi.

Maqsad

BookStore ob'ektini tahlil qilaylik.

U faqat uchta usulni ochib beradi, qolgan barcha toza funktsiyalar xususiydir.

Ob'ektning umumiy interfeysini tashqi tomondan o'zgartirish mumkin emas.

Davlat yashiringan. BookStore ob'ektidan foydalanuvchi mijozlar davlatga faqat ommaviy usullar orqali kirishlari mumkin.

Xulosa

Sof funktsiyalar haqida fikr yuritish osonroq.

Kutubxona yordamida biz yashiradigan va sof funktsiyalardan foydalanadigan do'kon yaratamiz.

Biz faqat toza funktsiyalarni yoza olamiz va kutubxonani ularni qo'llashga va mutatsiyaga ruxsat beramiz.

Siz namunalar kodini codeandbox.io-da tekshirishingiz mumkin.

Discover Funktsional JavaScript BookA Authority tomonidan yaratilgan eng yaxshi yangi Funktsional dasturlash kitoblaridan biri deb topildi!

Reaktsiya uchun funktsional texnikani qo'llash haqida ko'proq ma'lumot olish uchun Funktsional reaktsiyani ko'rib chiqing.

Dizayn naqshlarining asoslarini qanday qo'llashni bilib oling.

Siz meni Twitter-dan topishingiz mumkin.