মূল কন্টেন্টে যান
মডিউল 8 · 3-এর পাঠ 4কোর্সে 31/32~15 min
মডিউল পাঠ (3/4)

চ্যালেঞ্জ: ডেটা যাচাইকারী

ইনপুট ডেটা যাচাই করা হল এমন একটি জিনিস যা আপনি প্রায়শই করবেন: কোন ফর্ম, কোন API অন্ধভাবে করতে পারে না এটি যা পায় তা বিশ্বাস করুন। আসুন একটি ছোট ভ্যালিডেটর তৈরি করি যা কম্পোজযোগ্য নিয়ম এবং একত্রিত করে সমস্ত ত্রুটি পাওয়া যায়, শুধু প্রথমটি নয়।

এক নিয়ম = একটি ফাংশন

একটি নিয়ম বস্তুটি নেয় এবং ত্রুটি বার্তা সহ null (সব ভালো) বা একটি স্ট্রিং প্রদান করে।

JS
const nomeRichiesto = (utente) =>
  utente.nome && utente.nome.length > 0 ? null : 'nome obbligatorio';

const etaMaggiore = (utente) => (utente.eta >= 18 ? null : 'devi essere maggiorenne');

একাধিক নিয়ম রচনা

যাচাইকারী সমস্ত নিয়ম চালায় এবং ত্রুটিগুলি সংগ্রহ করে:

JS
function valida(utente, regole) {
  const errori = [];
  for (const regola of regole) {
    const msg = regola(utente);
    if (msg) errori.push(msg);
  }
  return errori;
}

কার্যকরী শৈলী:

JS
const valida = (obj, regole) => regole.map((r) => r(obj)).filter((m) => m !== null);

এটা বৈধ কিনা সিদ্ধান্ত

JS
const errori = valida(utente, [nomeRichiesto, etaMaggiore]);
const ok = errori.length === 0;

দরকারী প্যাটার্ন: নিয়ম কারখানা

যখন আপনার কাছে একই যুক্তি দিয়ে যাচাই করার জন্য অনেকগুলি ক্ষেত্র থাকে, তখন একটি ফ্যাক্টরি লিখুন:

JS
const richiesto = (campo) => (obj) =>
  obj[campo] != null && obj[campo] !== '' ? null : `${campo} obbligatorio`;

const minimo = (campo, n) => (obj) => (obj[campo] >= n ? null : `${campo} deve essere >= ${n}`);

const regole = [richiesto('nome'), richiesto('email'), minimo('eta', 18)];

প্রতিটি কারখানা একটি পূর্ব-কনফিগার করা নিয়ম ফাংশন প্রদান করে। এটা ঠিক পার্সার ব্যবহার করার মত জেনারেটর বা একটি যাচাইকারী যেমন Zod, শুধু ক্ষুদ্র আকারে।

চেষ্টা করে দেখুন

ব্যায়াম#js.m8.l3.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`validate(obj, rules)` সংজ্ঞায়িত করুন: প্রতিটি নিয়ম প্রয়োগ করুন (ফাংশন অবজে -> স্ট্রিং|নাল) এবং নিয়মের মতো একই ক্রমে শুধুমাত্র নন-নাল বার্তা সমন্বিত একটি অ্যারে ফেরত দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

rules.map((r) => r(obj)).filter((m) => m !== null)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m8.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

ফ্যাক্টরি `প্রয়োজনীয়(ক্ষেত্র)` সংজ্ঞায়িত করুন: এটি একটি নিয়ম প্রদান করে যে, একটি অবজেক্ট দেওয়া হলে, যদি অবজেক্ট [ক্ষেত্র] খালি না হয় (নাল নয়, অনির্ধারিত নয়, একটি খালি স্ট্রিং নয়), অন্যথায় স্ট্রিং '<field> obbligatorio'।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

একটি ক্লোজার রিটার্ন করুন যা obj[ক্ষেত্র] পড়ে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ