Latihan 1: Anti-patterns & Code Smells — Design Patterns
Latihan 1 dari materi Anti-patterns & Code Smells di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Starter sudah berisi empat contoh kode (godFn, clean, magicOnly, nestedOnly) dan mencetak detectSmells(...).join(',') untuk masing-masing; bagian itu tetap. Lengkapi detectSmells(source):
Ukur kedalaman kurung kurawal: telusuri tiap karakter, depth++ untuk { (simpan ke maxDepth kalau lebih tinggi) dan depth-- untuk }. Kalau maxDepth >= 4, push 'deep-nesting'.
Kembalikan smells.sort(), supaya urutannya abjad.
Console harus mencetak empat baris ini, berurutan:
deep-nesting,long-function,magic-number
baris kosong (clean gak punya smell, jadi [] di-join jadi teks kosong)
magic-number
deep-nesting
Yang juga dinilai: detectSmells("const x = 42;").join(",") harus magic-number, satu smell saja.
Hint
Tiap smell dicek terpisah dari teks kodenya: hitung barisnya, cari angka selain 0 dan 1, dan ukur seberapa dalam kurung kurawal bersarang. Kumpulkan nama yang cocok di satu array, lalu urutkan.
function detectSmells(source) { const smells = []; if (source.split('\n').length > 20) smells.push('long-function'); if (/\b(?!0\b|1\b)\d+\b/.test(source)) smells.push('magic-number'); /* ukur maxDepth di sini */ return smells.sort() }
let depth = 0; let maxDepth = 0; for (const ch of source) { if (ch === '{') { depth++; if (depth > maxDepth) maxDepth = depth } else if (ch === '}') { depth-- } } if (maxDepth >= 4) smells.push('deep-nesting')
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...