モジュール 8 · レッスン 3 / 4コース内の 31/32~15 min
モジュールのレッスン (3/4)
課題: データバリデーター
入力データの検証は、最も頻繁に行う作業の 1 つです。フォームや API は盲目的に実行できません。 受け取ったものを信頼してください。 構成可能なルールと 最初のエラーだけでなく、見つかった すべてのエラー を返します。
1 つのルール = 1 つの機能
ルールはオブジェクトを取得し、null (すべて正常) またはエラー メッセージを含む string を返します。
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)` を定義します。各ルール (関数 obj -> string|null) を適用し、ルールと同じ順序で非 null メッセージのみを含む配列を返します。
エディターを読み込み中…
ヒントを表示
rules.map((r) => r(obj)).filter((m) => m !== null)
3 回の試行後に解決策が利用可能になります
復習演習
運動#js.m8.l3.e2
試行回数: 0読み込み中…
ファクトリ `required(field)` を定義します。これは、オブジェクトが与えられた場合、obj[field] が空でない (null、未定義、空の文字列でない) 場合は null を返し、そうでない場合は文字列 '<field> obbligatorio' を返すというルールを返します。
エディターを読み込み中…
ヒントを表示
obj[field] を読み取るクロージャを返します。
3 回の試行後に解決策が利用可能になります