uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
-17 kunlar
+230 kunlar
Postlar arxiv
ToCode
1 419
# ื”ื–ื“ืžื ื•ื™ื•ืช ื•ืžืชื™ ืœื ืฆืœ ืื•ืชืŸ ื›ืœ ื™ื•ื ื‘ืขื‘ื•ื“ื” ืื ื—ื ื• ืžื•ืฆืคื™ื ื‘ืื™ื ืกืคื•ืจ ื”ื–ื“ืžื ื•ื™ื•ืช ืœืžื™ื“ื”: ืื•ืœื™ ื–ื” ื›ืœื™ ื—ื“ืฉ ืฉืžื™ืฉื”ื• ื›ืชื‘ ืขืœื™ื•, ืื•ืœื™ ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ืงื•ื“ ืœื ืžืกืคื™ืง ื˜ื•ื‘ ื•ื—ื•ืฉื‘ื™ื ืื™ืš ืœืฉืคืจ ืื•ืชื•, ืื•ืœื™ ื‘ืขื™ื” ืฉืืคืฉืจ ืœืขืฉื•ืช ืœื” ืื•ื˜ื•ืžืฆื™ื” ื‘ืขื–ืจืช ื›ืชื™ื‘ืช ื›ืœื™ ืงื˜ืŸ, ืื•ืœื™ ืืคืฉืจ ืœื›ืชื•ื‘ ื‘ื“ื™ืงื” ืื•ื˜ื•ืžื˜ื™ืช ืจืืฉื•ื ื” ืœืงื•ื“ ืฉืื™ืŸ ืœื• ื‘ื“ื™ืงื•ืช ื‘ื›ืœืœ. ืจื•ื‘ ื”ื–ืžืŸ ื”ื”ื–ื“ืžื ื•ื™ื•ืช ื”ืืœื” ื ืฉืืจื•ืช ืœื ืžื ื•ืฆืœื•ืช. ื˜ื›ื ื™ืงื” ื˜ื•ื‘ื” ืฉืขื•ื–ืจืช ืœื ืฆืœ ื™ื•ืชืจ ื”ื–ื“ืžื ื•ื™ื•ืช ื”ื™ื ืœืฉืจื™ื™ืŸ "ื–ืžืŸ ืจื™ืง" ื‘ื™ื•ืžืŸ, ืกืคืฆื™ืคื™ืช ืœื ื™ืฆื•ืœ ื”ื–ื“ืžื ื•ื™ื•ืช. ืขื›ืฉื™ื• ืื ื™ ื™ื•ื“ืข ืžื” ืืชื ื—ื•ืฉื‘ื™ื - ืžืื™ืคื” ืฉื™ื”ื™ื” ืœื™ ื–ืžืŸ ืจื™ืง ื‘ืœื•"ื– ืœืฉืจื™ื™ืŸ? ื”ืจื™ ื‘ืงื•ืฉื™ ื™ืฉ ืœื™ ื–ืžืŸ ืœื“ื‘ืจื™ื ืฉืื ื™ ืฆืจื™ืš ืœืขืฉื•ืช, ื•ื’ื ื›ื›ื” ื”ืžืขืจื›ืช ื‘ืžืฆื‘ ืคื—. ื•ื”ืชืฉื•ื‘ื” ืœืฆืขืจื™ ื”ื™ื ืฉื–ืžืŸ ืœื ืขื•ื‘ื“ ื›ื›ื”. ื”ื“ื‘ืจื™ื ืฉื‘ืคื•ืขืœ ืขืฉื™ืช ื”ื ืชื•ืฆืื” ืฉืœ ืžืื‘ืง ืขืœ ืชืฉื•ืžืช ืœื‘ ื‘ื™ืŸ ื›ืœ ื”ืžืฉื™ืžื•ืช ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช, ื•ื™ืฉ ืžืฉื™ืžื•ืช ื™ื•ืชืจ ื—ื–ืงื•ืช ืžืื—ืจื•ืช. ื‘ืื’ ื‘ืคืจื•ื“ืงืฉืŸ ืžื ืฆื— ื”ืจื‘ื” ืžืฉื™ืžื•ืช ืื—ืจื•ืช, ื‘ื“ื™ืงืช ืกื˜ื˜ื•ืก ื‘ืจืฉืช ื”ื—ื‘ืจืชื™ืช ื–ื• ื’ื ืžืฉื™ืžื” ื—ื–ืงื” ืื‘ืœ ืœืžื™ื“ื” ืื• Refactoring ืืœื” ืžืฉื™ืžื•ืช ืžืื•ื“ ื—ืœืฉื•ืช. ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืฉืœื ื• ืœื”ืฆืœื™ื— ื’ื ืœืœืžื•ื“ ื•ืœื”ืฉืชืคืจ ื”ื™ื ืœืงื—ืช ืฆื“ ื‘ืžืื‘ืง ื”ืžื•ื–ืจ ื”ื–ื” ืขืœ ื”ื–ืžืŸ ืฉืœื ื•, ื•ืœืชืช ื™ื™ืชืจื•ืŸ ืœื ื”ื•ื’ืŸ ืœืžืฉื™ืžื•ืช ืžืกื•ื™ืžื•ืช - ืžืฉื™ืžื•ืช ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉื ืžืฆืื•ืช ืชืžื™ื“ ื‘ื ื—ื™ืชื•ืช. ื”ื‘ืื’ื™ื ื‘ืคืจื•ื“ืงืฉืŸ ื™ื•ื“ืขื™ื ืœื“ืื•ื’ ืœืขืฆืžื. ื”ืžืฉื™ืžื” ืฉืœื›ื ื”ื™ื ืœื“ืื•ื’ ืœื›ืœ ืื•ืชืŸ ืžืฉื™ืžื•ืช ืฉืœื ื›ืœ ื›ืš ืžืชื—ืฉืง ืœืขืฉื•ืช, ืื‘ืœ ืื—ืจื™ ืฉืชื”ื™ื• ื˜ื•ื‘ื™ื ื‘ื”ืŸ ื™ืฉืคืจื• ืœื›ื ืืช ื”ื—ื™ื™ื ื‘ืฆื•ืจื” ืžืฉืžืขื•ืชื™ืช.

ToCode
1 419
# ื—ืžื™ืฉื” ื“ื‘ืจื™ื ืฉืื”ื‘ืชื™ ื‘ Vite ื•ืื—ื“ ืฉืžืžืฉ ืœื ื”ื›ืœื™ vite ืžืฆื™ืข ืื•ืกืฃ ืฉืœ ืชื‘ื ื™ื•ืช ื•ืกืงืจื™ืคื˜ื™ื ืœื”ืงืžื” ื•ืชื—ื–ื•ืงื” ืฉืœ ื™ื™ืฉื•ืžื™ Front End. ืคื™ืชื— ืื•ืชื• ืื™ื•ื•ืŸ ื™ื• ื‘ืฉื‘ื™ืœ ืœื”ืฆื™ืข ื—ื•ื•ื™ืช ืคื™ืชื•ื— ื˜ื•ื‘ื” ื™ื•ืชืจ ืœืžืคืชื—ื™ ื•ื•ื‘ ื‘ื“ื’ืฉ ืขืœ ืžื”ื™ืจื•ืช. ื‘ืขื–ืจืช Vite ืชื•ื›ืœื• ืœื‘ื ื•ืช ืคืจื•ื™ืงื˜ื™ื ืฉืœ ื”ืคืจื™ื™ืžื•ื•ืจืงืก ื”ืžื•ื‘ื™ืœื™ื - Vue, React, Svelte, preact ื•ืขื•ื“ ืื—ื“ ืฉื ืงืจื lit-element, ื•ื›ืžื•ื‘ืŸ ืคืจื•ื™ืงื˜ ื•ื•ื ื™ืœื” ืœืœื ืคืจื™ื™ืžื•ื•ืจืง. ื‘ื›ืœ ืื—ื“ ืžื”ืžืงืจื™ื ืชืงื‘ืœื• ืชื‘ื ื™ืช ืœืคืจื•ื™ืงื˜ ื•ืกืงืจื™ืคื˜ื™ื ืœื”ื’ืฉื” ื‘ืžืฆื‘ ืคื™ืชื•ื— ืื• ื‘ื ื™ื” ื‘ืžืฆื‘ ืคืจื•ื“ืงืฉืŸ. ื”ื ื” 5 ื“ื‘ืจื™ื ืฉืื”ื‘ืชื™ ื•ืื—ื“ ืฉืœื ื›ืœ ื›ืš ื‘ืคืจื•ื™ืงื˜ื™ Vite ืฉื™ืฆืจืชื™: ## ื”ืฉื ื›ื™ ื—ื™ื™ื‘ื™ื ืœื—ื™ื™ืš ื›ืฉืื™ื•ื•ืŸ ื™ื• ืžื•ืฆื ืฉืคื” ืฉื‘ื” ื”ืžื™ืœื” "ืžื”ื™ืจื•ืช" ืžืชื—ื™ืœื” ื‘ืื•ืช V ื•ื”ืคื•ืขืœ "ืœื”ืื˜" ืžืชื—ื™ืœ ื‘ืื•ืช R. ## ื—ื•ื•ื™ืช ื”ืคื™ืชื•ื— ื›ืŸ, ื–ื” ืžื”ื™ืจ. ืงื•ื“ื ื›ืœ ื›ื™ ื™ืฉ ื”ืจื‘ื” ืคื—ื•ืช ืชืœื•ื™ื•ืช ืื– ื”ืงืžืช ืคืจื•ื™ืงื˜ ืจื™ืืงื˜ ืœืงื—ื” ืœื™ 15 (ื‘ื”ืฉื•ื•ืื” ืœ create-react-app ืฉื‘ื™ื•ื ื˜ื•ื‘ ืžืกื™ื™ื ืชื‘ื ื™ืช ื‘ืฉืชื™ ื“ืงื•ืช). ื’ื ื”ืจืฆืช ื”ืคืจื•ื™ืงื˜ ื•ื–ื™ื”ื•ื™ ื”ืฉื™ื ื•ื™ื™ื ื‘ื–ืžืŸ ืืžืช ืขื•ื‘ื“ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ ืžืคืจื•ื™ืงื˜ื™ื ืฉืœ create-react-app. ื”ืกื™ื‘ื” ื”ืžืจื›ื–ื™ืช ืœืžื”ื™ืจื•ืช ืœื˜ืขื ืช ืื™ื•ื•ืŸ ื™ื• ื”ื™ื ื”ืžืขื‘ืจ ืœืฉื™ืžื•ืฉ ื‘ ES Modules ื‘ืžืฆื‘ ืคื™ืชื•ื—, ื›ืœื•ืžืจ ื”ื•ื ืœื ื˜ื•ืจื— ืœืจื•ืฅ ืขืœ ื›ืœ ื”ืงื‘ืฆื™ื ื•ืœื‘ื ื•ืช ื‘ืื ื“ืœ ื‘ืžืฆื‘ ืคื™ืชื•ื— ื•ื‘ืžืงื•ื ื–ื” ืžืฉืชืžืฉ ื‘ืชืžื™ื›ื” ื”ื˜ื‘ืขื™ืช ื‘ื“ืคื“ืคื ื™ื ื‘ import. ื–ื” ืขื•ื‘ื“ ื’ื ืžื‘ื—ื™ื ืช ื–ืžืŸ ืขืœื™ื” ืžืื•ื“ ืžื”ื™ืจ ืฉืœ ื”ืฉืจืช ื•ื’ื ืžื‘ื—ื™ื ืช ื–ื™ื”ื•ื™ ืฉื™ื ื•ื™ื™ื ื•ื˜ืขื™ื ื” ืžื—ื“ืฉ ืžื™ื™ื“ื™ืช ืฉืœ ื”ืงื•ื“ ื”ืขื“ื›ื ื™. ## ืืคืก ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื”ื’ื™ืฉื” ืฉืœ create-react-app ืœืืคืก ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื”ื™ื ืื™ื•ืžื”: ื”ื ืžืฉืชืžืฉื™ื ื‘ webpack ืื‘ืœ ืœื ื ื•ืชื ื™ื ืœื›ื ืœื’ืขืช ื‘ืงื•ื ืคื™ื’ื•ืจืฆื™ื•ืช ื•ื•ื‘ืคืืง ืฉืœื”ื. ื”ื ืžื—ื–ื™ืงื™ื ืžืขืจืš ืื™ื ืกื•ืคื™ ืฉืœ Build Scripts ืฉืฉื•ื‘ ืื™ ืืคืฉืจ ืœื’ืขืช ื‘ื•, ื•ืื ืชืขื–ื• ืœื—ืœื•ื ืขืœ ืžืฉื”ื• ืฉื”ื ืœื ืชื•ืžื›ื™ื ื‘ื• ื”ื ื™ืฆืขืงื• ืขืœื™ื›ื ื•ื™ื–ืจืงื• ืขืœื™ื›ื ืžืื•ืช ืฉื•ืจื•ืช ืฉืœ ืงื‘ืฆื™ ื”ื’ื“ืจื•ืช ืฉืชืชื—ื–ืงื• ื‘ืขืฆืžื›ื. ืื™ื•ื•ืŸ ื™ื• ื”ื—ืœื™ืฃ ืืช ื•ื•ื‘ืคืืง ื‘ Rollup, ืœื˜ืขื ืชื• ืžืฉื™ืงื•ืœื™ ืžื”ื™ืจื•ืช, ืื‘ืœ ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ื”ื•ื ืฉื—ื•ืฅ ืžืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ืžืขื•ืœื™ื ื”ื•ื ื’ื ื ื•ืชืŸ ืœื ื• ื’ื™ืฉื” ืœื”ื’ื“ืจื•ืช ื” Rollup ื•ืืคื™ืœื• ืžืชืขื“ ืืช ื–ื”. ืจื•ืฆื™ื ืœื™ืฆื•ืจ ืคืจื•ื™ืงื˜ ืขื ืžืกืคืจ ืงื‘ืฆื™ HTML? ืื™ืŸ ื‘ืขื™ื”. ืจื•ืฆื™ื ืœืฉื ื•ืช ืืช ืžื‘ื ื” ืงื•ื‘ืฅ ื” HTML ืฉื ื•ืฆืจ? ื”ื›ื™ ืงืœ ื‘ืขื•ืœื, ื”ื•ื ื—ืœืง ืžื”ืคืจื•ื™ืงื˜. ื•ื›ืžื•ื‘ืŸ TypeScript ื• Scss ื ืชืžื›ื™ื Out Of The Box - ืคืฉื•ื˜ ื˜ื•ืขื ื™ื ืงื•ื‘ืฅ ืขื ื”ืกื™ื•ืžืช ื”ืžืชืื™ืžื” ื•ื”ื›ืœ ืขื•ื‘ื“. ื ื›ื•ืŸ, ืื ื—ื ื• ืžื—ื•ื™ื‘ื™ื ืœืžื‘ื ื” ืฉืœ ES Modules ื•ืžื–ื” ืœื ื”ืฆืœื—ืชื™ ืœื‘ืจื•ื— - ืื‘ืœ ื‘ืžืื–ืŸ ื”ื›ืœืœื™ ืฉืœ ื”ื“ื‘ืจื™ื ื ืจืื” ืœื™ ืฉืื™ื•ื•ืŸ ื™ื• ืขืฉื” ืขื‘ื•ื“ื” ื“ื™ ื˜ื•ื‘ื”. ื›ืœ ืขื•ื“ ืืชื ืžื•ื›ื ื™ื ืœืกืžื•ืš ืขืœ ื”ืชืžื™ื›ื” ื”ืžื•ื‘ื ื™ืช ื‘ื“ืคื“ืคื ื™ื ื‘ ES6 Modules ืคืจื•ื™ืงื˜ vite ื™ืขื‘ื•ื“ ืœื›ื ื“ื™ ื˜ื•ื‘. (ื•ืื ืืชื ื›ืŸ ืฆืจื™ื›ื™ื ืชืžื™ื›ื” ื‘ื“ืคื“ืคื ื™ื ื™ืฉื ื™ื ื™ืฉ ืœื”ื Legacy Plugin ืฉื ืจืื” ืฉื ื•ืชืŸ ืคื™ืชืจื•ืŸ). ## ื—ื™ืกื•ืœ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืžืชื•ืช ื’ื ื‘ืœื™ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื”ื“ื‘ืจื™ื ื”ื—ืฉื•ื‘ื™ื ืฉื. ื›ืฉื ื™ืกื™ืชื™ ืœื™ืฆื•ืจ ืงื•ื‘ืฅ utils.js ืฉืžื™ื™ืฆื ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช:
export function foo() {
    return "foo";
}

export function bar() {
    return "bar";
}

ืื‘ืœ ื‘ืงื•ื‘ืฅ ื” main.js ื˜ืขื ืชื™ ืจืง ืื—ืช ืžื”ืŸ:
import { foo } from './utils';
ื›ืฆืคื•ื™ ื”ืคื•ื ืงืฆื™ื” bar ืื•ืชื” ืœื ื˜ืขื ืชื™ ืœื ื ื›ื ืกื” ืœื‘ืื ื“ืœ ืฉื‘ื ื™ืชื™. ื”ื•ื ื’ื ืžืกืคื™ืง ื—ื›ื ื‘ืฉื‘ื™ืœ ืœื™ื™ืฆืจ ืงื•ื‘ืฅ vendor.js ืœืกืคืจื™ื•ืช ืž node_modules ื•ืœื”ื•ืกื™ืฃ Hash ืœืฉื ื”ืงื•ื‘ืฅ ื›ื“ื™ ืœื”ืชืžื•ื“ื“ ืขื Browser Cache. ## ืคืจื•ื™ืงื˜ ืจื™ืืงื˜ ื‘ืœื™ reportWebVitals ืจืง ืขื“ ืœืคื” ื”ื™ื” ืžืกืคื™ืง ืœื™ ื‘ืฉื‘ื™ืœ ืœื”ืชื—ื™ืœ ืœื”ืฉืชืžืฉ ื‘ vite ืœื›ืœ ืคืจื•ื™ืงื˜ ืจื™ืืงื˜ ื—ื“ืฉ ืฉืื ื™ ื‘ื•ื ื” - ืื‘ืœ ืื– ื’ื™ืœื™ืชื™ ืืช ื”ืžืžืชืง ื”ืื—ืจื•ืŸ: ืคืจื•ื™ืงื˜ื™ ืจื™ืืงื˜ ืฉืชื‘ื ื• ืขื vite ืœื ื™ื›ืœื•ืœ ืืช ื”ืกืคืจื™ื” web-vitals ื•ืœื ื™ืคืขื™ืœ ืืช reportWebVitals ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™. ืœื ืฉื™ืฉ ืœื™ ืžืฉื”ื• ื ื’ื“ื, ืคืฉื•ื˜ ืžืขื“ื™ืฃ ืฉืชื‘ื ื™ื•ืช ืคืจื•ื™ืงื˜ ื™ื›ืœืœื• ืจืง ืคื™ืฆ'ืจื™ื ืฉืื ื™ ื‘ืืžืช ืžื‘ืงืฉ. ## ื•ืจืžืื•ืช ืื—ืช: ื–ืžืŸ ื‘ื ื™ื” ืœืคืจื•ื“ืงืฉืŸ ืœืžืจื•ืช ื›ืœ ื”ื“ื‘ืจื™ื ื”ื˜ื•ื‘ื™ื ืื™ื•ื•ืŸ ื™ื• ื”ื•ืกื™ืฃ ื’ื ื˜ืจื™ืง ืžืœื•ื›ืœืš ืื—ื“ ืœ Vite: ื”ื•ื ื‘ื™ื˜ื•ืœ ื™ืฆื™ืจืช Source Maps ื‘ืžืฆื‘ ืคืจื•ื“ืงืฉืŸ. ื”ืžื˜ืจื” ื”ื™ืชื” ื›ื ืจืื” ืœืฉืคืจ ืžื”ื™ืจื•ืช ื‘ื ื™ื” ืœืคืจื•ื“ืงืฉืŸ ื•ื”ืžื—ืฉื‘ื” ื”ื™ืชื” ืฉืžืžื™ืœื ืืฃ ืื—ื“ ืœื ื™ืฉื™ื ืœื‘, ื•ื ื›ื•ืŸ ื“ื™ ืงืœ ืœื”ื—ื–ื™ืจ ืืช ื–ื” (ื‘ืกืš ื”ื›ืœ ืฉื™ื ื•ื™ ื”ื’ื“ืจื” ื‘ืงื•ื‘ืฅ ื”ืงื•ื ืคื™ื’ื•ืจืฆื™ื”). ื•ืขื“ื™ื™ืŸ. ื”ื”ื‘ื“ืœ ื‘ื™ืŸ Source Maps ืœ reportWebVitals ื”ื•ื ืฉื‘ Source Maps ืื ื—ื ื• ื‘ืืžืช ืžืฉืชืžืฉื™ื ื‘ืคืจื•ื“ืงืฉืŸ. ื›ืฉื™ืฉ ื‘ืื’ ื‘ืคืจื•ื“ืงืฉืŸ ืฉืœื ืžืฉืชื—ื–ืจ ื‘ืคื™ืชื•ื—, ืžืื•ื“ ืขื•ื–ืจ ืœืคืชื•ื— ืืช ื›ืœื™ ื”ืคื™ืชื•ื— ื•ืœืจืื•ืช ืืช ื”ืงื•ื“ ื”ืžืงื•ืจื™ ืฉื›ืชื‘ืช. ื‘ืกืš ื”ื›ืœ ื•ื™ื˜ ืœื’ืžืจื™ ืฉื•ื•ื” ืืช ื”ื–ืžืŸ ืฉืœื›ื - ื–ืžืŸ ื”ืœื™ืžื•ื“ ืงืฆืจ ื•ื—ื•ื•ื™ืช ื”ืคื™ืชื•ื— ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ื” ืž create-react-app. ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ืชื•ื›ืœื• ืœื‘ืงืจ ื‘ืืชืจ ืฉืœื”ื ื‘ืงื™ืฉื•ืจ: https://vitejs.dev/

ToCode
1 419
# ืœื ืœื“ืื•ื’, ืื ื™ ื™ื•ื“ืข ืจื•ื‘ื™ ื”ื—ื™ื“ื” ื”ื‘ืื” ื”ื’ื™ืขื” ืืœื™ื™ ื‘ืžืงืจื” ื‘ื˜ืœื’ืจื: > ืžื‘ืœื™ ืœืฉื ื•ืช ืืช ืกื“ืจ ื”ืžืกืคืจื™ื, ืขืœื™ื›ื ืœื”ืฆื™ื‘ 3 ืกื™ืžื ื™ ื—ื™ื‘ื•ืจ ืื• ื—ื™ืกื•ืจ ื‘ื™ื ื™ื”ื ื›ืš ืฉืชืงื‘ืœื• ืžืฉื•ื•ืื” ื ื›ื•ื ื”: > 100 = 9 8 7 6 5 4 3 2 1 ืื—ืจื™ ื›ืžื” ื“ืงื•ืช ืฉืœ Brute Force ื‘ืจืืฉ ื”ื‘ื ืชื™ ืฉืขื“ื™ืฃ ืœืชืช ืœืžื—ืฉื‘ ืœืฉื‘ื•ืจ ืืช ื”ืจืืฉ ืขืœ ื–ื”, ื•ื–ื” ื”ื–ื›ื™ืจ ืœื™ ื›ืžื” ื ืขื™ื ืœื›ืชื•ื‘ ืงื•ื“ ื‘ืจื•ื‘ื™. ## ืื™ืš ืžื—ืฉื‘ ื ื™ื’ืฉ ืœื›ื–ืืช ืฉืืœื” ื ื•ื— ืœื”ืชื—ื™ืœ ืœื—ืฉื•ื‘ ืขืœ ื”ื—ื™ื“ื” ื”ื–ืืช ืžื”ืกื•ืฃ. ื”ืคื™ืชืจื•ืŸ ื‘ื˜ื•ื— ื™ื”ื™ื” ืจืฆืฃ ืฉืœ 4 ืžืกืคืจื™ื (ื›ื™ ืฆืจื™ืš 3 ืกื™ืžื ื™ ื—ื™ื‘ื•ืจ ื•ื—ื™ืกื•ืจ ื‘ื™ื ื™ื”ื). ื“ื‘ืจ ื ื•ืกืฃ ืฉืืคืฉืจ ืœืจืื•ืช ื”ื•ื ืฉืื ื™ืฉ ืœื›ื ื‘ื™ื“ ืื™ื–ืฉื”ื• ื ื™ื—ื•ืฉ ื—ืœืงื™, ืœืžืฉืœ ื”ืชื—ืœืชื ืขื ื”ืžืกืคืจ 12, ืื– ืงืœ ืœืจืื•ืช ืžื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื”ืฆืขื“ื™ื ื”ื‘ืื™ื. ื‘ืžืงืจื” ืฉืœ 12 ืืคืฉืจ ืœื”ืžืฉื™ืš ืœื”ืืจื™ืš ืืช ื”ืžืกืคืจ ืœ 123, ืื• ืœื”ืชื—ื™ืœ ืžืกืคืจ ื—ื“ืฉ ืฉื™ื”ื™ื” 3 ืื• -3. ื‘ื›ืชื™ื‘ ืžื•ื ื—ื” ืขืฆืžื™ื ื ื•ื›ืœ ืœื›ืชื•ื‘ ืžื—ืœืงื” ืฉืžื™ื™ืฆื’ืช ืฉืจืฉืจืช ืฉืœ ืžืกืคืจื™ื ื•ืชื”ื™ื” ืœื” ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” ืืช ื”ืืคืฉืจื•ื™ื•ืช ืœืฆืขื“ ื”ื‘ื. ื ื ื™ื— ืฉืชื”ื™ื” ืœื™ ืืช ื”ืฉืจืฉืจืช:
[1, 234]
ื›ืœื•ืžืจ ืคืœื•ืก ืื—ื“ ื•ืื– ืคืœื•ืก 234, ืื– ื™ืฉ ื‘ืกืš ื”ื›ืœ 3 ืืคืฉืจื•ื™ื•ืช ืœืฆืขื“ ื”ื‘ื:
[1, 234, -5]
[1, 234, 5]
[1, 2345]
ื•ื›ืœ ืฉืจืฉืจืช ืžื”-3 ื’ื ื™ื›ื•ืœื” ืœื”ืžืฉื™ืš ื•ืœื”ื™ืคืชื— ื‘ืชื•ืจื” ืœ-3 ืฉืจืฉืจืื•ืช ื ื•ืกืคื•ืช ื•ื›ืš ื”ืœืื”, ื›ืืฉืจ ื›ืœ ืฉืœื‘ ื‘ืžืงืจื” ื”ื’ืจื•ืข ื™ื›ืคื™ืœ ืคื™ 3 ืืช ืžืกืคืจ ื”ืฉืจืฉืจืื•ืช ืื‘ืœ ืžื”ืจ ืžืื•ื“ ื–ื” ื™ื™ื’ืžืจ ื›ืฉื ืกื™ื™ื ืืช ื›ืœ ื”ืžืกืคืจื™ื. ## ื•ื”ืงื•ื“ ื‘ืจื•ื‘ื™ ืฉืจืฉืจืช ืชื”ื™ื” ื‘ืกืš ื”ื›ืœ ืกื•ื’-ืฉืœ ืžืขืจืš ืฉื™ืฉ ืœื• ืคื•ื ืงืฆื™ื™ืช expand ืฉืžื—ื–ื™ืจื” ืืช ืฉืœื•ืฉ ื”ืฉืจืฉืจืื•ืช ืฉื™ื›ื•ืœื•ืช ืœื”ืžืฉื™ืš ืื•ืชื”. ืื ื™ ืžื’ื“ื™ืจ ืืช ื”ืžื—ืœืงื” ื•ืžืกืคืจ ืคื•ืงื ืฆื™ื•ืช ืขื–ืจ:
class Chain
  attr_accessor :values

  def initialize(values)
    @values = values
  end

  def last
    @values[-1] || 0
  end

  def sum
    @values.sum
  end

  def to_s
    "Chain: #{values}"
  end
end
ื•ื”ืคื•ื ืงืฆื™ื” ื”ืžืขื ื™ื™ื ืช, expand, ื”ื™ื ื–ื• ืฉืœื•ืงื—ืช ืฉืจืฉืจืช ื•ืžื•ืกื™ืคื” ืœื” ืกื™ืคืจื”, ืื• ื‘ืชื•ืจ ืกื™ืคืจื” ื—ื“ืฉื” ืœืžืกืคืจ ื”ืื—ืจื•ืŸ ื‘ืฉืจืฉืจืช ืื• ื‘ืชื•ืจ ืžืกืคืจ ื—ื“ืฉ:
  def expand
    return if last.abs % 10 == 9
    return if values.length > 4

    value = last.abs
    next_value = (value % 10) + 1
    concatenated_value = (value * 10 + value % 10 + 1) * (last >= 0 ? 1 : -1)

    [
      Chain.new([*values, next_value]),
      Chain.new([*values, -1 * next_value]),
      Chain.new(values[0..-2].concat([concatenated_value]))
    ]
  end
ื‘ืขื™ืงืจื•ืŸ ืจื•ื‘ื•ืงื•ืค ื›ืขืก ืขืœื™ื™ ืฉื”ืคื•ื ืงืฆื™ื” ืžืกื•ื‘ื›ืช ืžื“ื™, ืื– ืื ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช Refactoring ืฉื™ื”ืคื›ื• ืื•ืชื” ืœืคืฉื•ื˜ื” ื™ื•ืชืจ ื•ืขื“ื™ื™ืŸ ืงืจื™ืื” ืžื•ื–ืžื ื™ื ืœื”ืฉืื™ืจ ื‘ืชื’ื•ื‘ื•ืช ื•ืื—ืจื™ ื›ืœ ื”ื”ืฉืงืขื” ื‘ืžื—ืœืงื” Chain ืืคืฉืจ ืœืกื™ื™ื ืืช ื”ืชืจื’ื™ืœ ืขื ืœื•ืœืื” ืคืฉื•ื˜ื” ืฉืžืชื—ื™ืœื” ืขื ืžืขืจืš ืฉืœ Chain ื™ื—ื™ื“ ื•ืจื™ืง, ื•ื‘ื›ืœ ืื™ื˜ืจืฆื™ื” ืžืคืขื™ืœื” expand ืขืœ ื›ืœ ื”ืฉืจืฉืจืื•ืช ื‘ืžืขืจืš ื•ืžื—ืคืฉืช ืื ื”ืกื›ื•ื ืฉืœ ืื—ืช ืžื”ืŸ ื”ื•ื 100:
state = [Chain.new([])]
loop do
  state = state.flat_map(&:expand).reject(&:nil?)
  if (final = state.find { |chain| chain.values.size == 4 && chain.sum == 100 })
    puts final
    break
  end
end
ื›ืœ ื”ืชื•ื›ื ื™ืช ืœืงื—ื” ืคื—ื•ืช ืž 50 ืฉื•ืจื•ืช ืงื•ื“ ื•ื”ืจื‘ื” ืคื—ื•ืช ื–ืžืŸ ืžืžื” ืฉื”ื™ื” ืœื•ืงื— ืœื™ ืœืžืฆื•ื ืืช ื”ืฉืจืฉืจืช ื”ืžืชืื™ืžื” ื‘ Brute Force ื‘ืจืืฉ.

ToCode
1 419
# ืื– ืžื” ื‘ืืžืช ื”ื”ื‘ื“ืœ ื‘ื™ืŸ Authorization ืœ Authentication? ืฉืชื™ ืžื™ืœื™ื ืืจื•ื›ื•ืช ื‘ืื ื’ืœื™ืช ืฉืžืชื™ื—ืกื•ืช ืœืื•ืชื• ืขื•ืœื ืชื•ื›ืŸ ืื‘ืœ ืœื›ืœ ืื—ืช ืžืฉืžืขื•ืช ื™ื™ื—ื•ื“ื™ืช ืžืฉืœื”, ื•ืœื ื›ื“ืื™ ืœื”ืชื‘ืœื‘ืœ. ืฉืชื™ ื”ืžื™ืœื™ื ืžืชื™ื—ืกื•ืช ืœื ื™ื”ื•ืœ ื”ืจืฉืื•ืช ื‘ืžืขืจื›ื•ืช ื•ื•ื‘. ืœืžืขืจื›ืช ื•ื•ื‘ ื™ืฉ ื˜ื‘ืœื” ืฉืœ ืžืฉืชืžืฉื™ื ืฉื™ื›ื•ืœื™ื ืœื”ืชื—ื‘ืจ, ื•ืœื›ืœ ืžืฉืชืžืฉ ื‘ื“ืจืš ื›ืœืœ ื™ื”ื™ื” ืžื–ื”ื” ื•ืœืคืขืžื™ื ื‘ืขืžื•ื“ื•ืช ื ื•ืกืคื•ืช ืขื•ื“ ืงืฆืช ืžื™ื“ืข ืขืœ ืื•ืชื• ืžืฉืชืžืฉ. ื”ืžื™ืœื” ื”ืจืืฉื•ื ื”, Authentication, ืื• ื‘ืงื™ืฆื•ืจ AuthN (ื›ื™ ืื ืืคืฉืจ ืœื‘ืœื‘ืœ ืงืฆืช ืื– ืœืžื” ืœื), ืžืชื™ื—ืกืช ืœื™ื›ื•ืœืช ืฉืœ ืžืขืจื›ืช ืœื–ื”ื•ืช - ืขื‘ื•ืจ ื‘ืงืฉื” ืกืคืฆื™ืคื™ืช - ืžื™ ื”ืžืฉืชืžืฉ ืฉื™ื–ื ื‘ืงืฉื” ื–ื•. ืื• ื‘ืžื™ืœื™ื ืคืฉื•ื˜ื•ืช ืžื™ ื”ืžืฉืชืžืฉ ืฉื›ืจื’ืข ืžื ืกื” ืœืขืฉื•ืช ืžืฉื”ื• ื‘ืžืขืจื›ืช. ื•ื›ืฉืื ื™ ืื•ืžืจ "ืžื™" ืื ื™ ืžืชื›ื•ื•ืŸ ืœืฉื•ืจื” ื”ืžืชืื™ืžื” ืžื˜ื‘ืœืช ื”ืžืฉืชืžืฉื™ื ืื• ืœืžื–ื”ื” ื”ืžืฉืชืžืฉ ืฉืฉืžื•ืจ ืฉื. ื›ืœ ื”ื˜ื›ื ื™ืงื•ืช ืฉืœ ื–ื™ื”ื•ื™ ื“ื•-ืฉืœื‘ื™, ื–ื™ื”ื•ื™ ื“ืจืš ืกืžืก, ื–ื™ื”ื•ื™ ืขื ื˜ื‘ื™ืขืช ืืฆื‘ืข ืื• ืžืคืชื—ื•ืช - ื›ื•ืœืŸ ื ื›ื ืกื•ืช ืœืชื•ืš ื”ืขื•ืœื ืฉืœ Authentication. ืืช ื” Authentication ื’ื ืงืœ ื™ื—ืกื™ืช ืœื”ื•ืฆื™ื ื”ื—ื•ืฆื” ืœืกืจื‘ื™ืก ืื• ืžืขืจื›ืช ื—ื™ืฆื•ื ื™ื™ื, ืœื“ื•ื’ืžื” ื›ืฉืชื ืกื• ืœื”ืชื—ื‘ืจ ืœืื™ื–ื•ืฉื”ื™ ืžืขืจื›ืช ืฉืœ ื’ื•ื’ืœ ืงื•ื“ื ืชืฆื˜ืจื›ื• ืœื‘ืฆืข ื”ื–ื“ื”ื•ืช ืžื•ืœ accounts.google.com ื›ื“ื™ ืœื•ื•ื“ื "ืžื™" ืืชื. ื”ืžื™ืœื” ื”ืฉื ื™ื”, Authorization, ืื• ื‘ืงื™ืฆื•ืจ AuthZ, ืžืชื™ื—ืกืช ืœืžื” ืžื•ืชืจ ืื• ืืกื•ืจ ืœืžืฉืชืžืฉ ืœืขืฉื•ืช. ื‘ืžื™ืœื™ื ืื—ืจื•ืช ื‘ื”ื™ื ืชืŸ ืฉืขื›ืฉื™ื• ื™ื•ืฉื‘ ืžื•ืœื™ ืžืฉืชืžืฉ ื•ื™ืฉ ืœื™ ืขืœื™ื• ืืช ื›ืœ ื”ืžื™ื“ืข ืžื˜ื‘ืœืช ื”ืžืฉืชืžืฉื™ื - ื”ืื ืžื•ืชืจ ืื• ืืกื•ืจ ืœื• ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื” ืฉื”ื•ื ืจื•ืฆื” ืœืขืฉื•ืช. ื›ืœืœื™ Authorization ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžื•ื‘ืœืขื™ื ื‘ืงื•ื“ ืื• ืžืคื•ืจืฉื™ื. ื›ืœืœื™ื ืžื•ื‘ืœืขื™ื ื”ื ืคืฉื•ื˜ ืชื•ืฆืื” ืฉืœ ื”ืงื•ื“ ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื. ืœื“ื•ื’ืžื” ืงื•ื“ ืžื”ืกื•ื’ ื”ื–ื” ื›ื•ืœืœ ื›ืœืœื™ Authorization ืžื•ื‘ืœืขื™ื:
exports.getTasks = function(user) {
    mongoClient.collection('tasks').find({ owner: user }).toArray();
}
ื”ืคื•ื ืงืฆื™ื” ืžืงื‘ืœืช ืžื–ื”ื” ืžืฉืชืžืฉ ื•ืžื—ื–ื™ืจื” ืืช ื›ืœ ื”ืžืฉื™ืžื•ืช ืฉืœ ืื•ืชื• ืžืฉืชืžืฉ, ื•ืœื›ืŸ ื”ื™ื ืื•ืžืจืช ืžืฉื”ื• ืขืœ ืžื” ืžื•ืชืจ ืื• ืืกื•ืจ ืœืžืฉืชืžืฉื™ื ืžืกื•ื™ืžื™ื ืœืขืฉื•ืช. ืื‘ืœ ื”ื™ื ืื•ืžืจืช ืืช ื–ื” ื‘ืฆื•ืจื” ืžื•ื‘ืœืขืช - ื•ื™ื—ืกื™ืช ืงืœ ื‘ืฉื™ื ื•ื™ ืขืชื™ื“ื™ ืฉืœ ื”ืงื•ื“ ื‘ื˜ืขื•ืช ืœื‘ื˜ืœ ืืช ื”ื‘ื“ื™ืงื”. ื›ืœืœื™ Authorization ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื’ื ืžืคื•ืจืฉื™ื, ืœื“ื•ื’ืžื” ืืช ืื•ืชื” ืคื•ื ืงืฆื™ื” ื™ื›ืœืชื™ ืœื›ืชื•ื‘ ื›ืš:
exports.getTasks = function(user) {
    const tasks = mongoClient.collection('tasks').find({ owner: user }).toArray();
    
    authorize(user, 'read', tasks);
    
    return tasks;
}
ืืช ื”ืคื•ื ืงืฆื™ื” authorize ื ืฆื˜ืจืš ืœื›ืชื•ื‘ ื‘ืžืงื•ื ืื—ืจ ื‘ืฆื•ืจื” ืžืกื•ื“ืจืช, ื•ื™ืฉ ืœื ืžืขื˜ ืคืจื™ื™ืžื•ื•ืจืงื™ื ืฉื™ืขื–ืจื• ื‘ื–ื”. ื”ื ืงื•ื“ื” ื”ื—ืฉื•ื‘ื” ื›ืืŸ ื”ื™ื ืฉื’ื™ืฉื” ื–ื• ื”ื•ืคื›ืช ืืช getTasks, ื•ืืช ื”ืงื•ื“ ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื”ืจื‘ื” ื™ื•ืชืจ ืžืื•ื‘ื˜ื—. ื’ื ืื ื‘ืขืชื™ื“ ืžื™ืฉื”ื• ื‘ื˜ืขื•ืช ื™ืฉื ื” ืืช ื”ืฉืื™ืœืชื”, ืขื“ื™ื™ืŸ ืœืคื ื™ ืฉื ื—ื–ื™ืจ ืืช ื”ืžื™ื“ืข ืื ื—ื ื• ืžื•ื•ื“ืื™ื ืฉืœืžืฉืชืžืฉ ืžื•ืชืจ ื‘ื›ืœืœ ืœืงืจื•ื ืื•ืชื•. ื‘ Node.JS, ื”ืกืคืจื™ื” passport ืžืกืคืงืช ื“ืจืš ืคื•ืคื•ืœืจื™ืช ืœื‘ืฆืข AuthN. ื”ืกืคืจื™ื” cancan ืžืกืคืงืช ืคื™ืชืจื•ืŸ Authorization ืœื™ื™ืฉื•ืžื™ ื•ื•ื‘, ืื‘ืœ ื”ื™ื ื”ืจื‘ื” ืคื—ื•ืช ืคื•ืคื•ืœืจื™ืช ืž Passport. ืื•ืœื™ ื›ื™ ื”ืจื‘ื” ืื ืฉื™ื ืžืขื“ื™ืคื™ื ืœื‘ื ื•ืช ืคื™ืชืจื•ืŸ ื›ื–ื” ื‘ืขืฆืžื.

ToCode
1 419
# ืœื ื ื—ืฉื‘ "ื”ื•ื ื”ื™ื” ืคืจื™ืœืื ืกืจ 5 ืฉื ื™ื, ื–ื” ืœื ื ื—ืฉื‘ ื ื™ืกื™ื•ืŸ" "ื”ื™ื ื›ืชื‘ื” 8 ืฉื ื•ืช ื ื™ืกื™ื•ืŸ, ืื‘ืœ ืชื›ืœ'ืก ืจืง 2 ืžืชื•ื›ืŸ ื‘ื—ื‘ืจื” ืจืฆื™ื ื™ืช. ื”ืฉืืจ ืœื ื ื—ืฉื‘" "ืคื—ื•ืช ืž-500 ืžื™ืœื™ื? ื–ื” ืœื ื ื—ืฉื‘ ืคื•ืกื˜" "ืงื•ืจืก ืคื™ื™ืชื•ืŸ ื‘ืœื™ ืคื ื“ืก? ื–ื” ืœื ื ื—ืฉื‘" "ื›ืœ ื”ืคืจื•ื ื˜ืื ื“ ื”ื–ื” ืœื ื‘ืืžืช ื ื—ืฉื‘ ืชื›ื ื•ืช" "ื›ืชื‘ืช ื›ืœื™ ืฉ 90% ืžื”ืžืชื›ื ืชื™ื ื‘ื’ื•ื’ืœ ืžืฉืชืžืฉื™ื? ื ื•, ื–ื” ืœื ื ื—ืฉื‘ ืื ืืชื” ืœื ื™ื›ื•ืœ ื’ื ืœื”ืคื•ืš ืขืฅ ื‘ื™ื ืืจื™" ื”ืกื›ื ื” ื‘ืื ืฉื™ ื”"ืœื ื ื—ืฉื‘" ื”ื™ื ืฉื—ืœื™ืœื” ื™ื•ื ืื—ื“ ื ืชื—ื™ืœ ืœื”ืงืฉื™ื‘ ืœื”ื. ืื ื™ ืœื ื™ื•ื“ืข ืžื” ื™ืขื‘ื•ื“ ื‘ืฉื‘ื™ืœื›ื, ื‘ื—ื™ื™ื ืฉืœื›ื, ื‘ืชืขืฉื™ื” ืฉืœื›ื, ื‘ืกื‘ื™ื‘ื” ืฉืœื›ื - ืืชื ืชืฆื˜ืจื›ื• ืœื’ืœื•ืช ืืช ื–ื” ืœื‘ื“. ืœื ื›ื“ืื™ ืœืขืฉื•ืช ืืช ื”ื—ื™ื™ื ื™ื•ืชืจ ืงืฉื™ื ืžืžื” ืฉื”ื ื•ืœื”ื•ืกื™ืฃ ื”ื’ื‘ืœื•ืช ืžืœืื›ื•ืชื™ื•ืช. ืื ื–ื” ืžืชืื™ื ืœื›ื ื•ืžืงื“ื ืืชื›ื, ื–ื” ื ื—ืฉื‘.

ToCode
1 419
# ื”ื“ื‘ืจื™ื ื”ืงื˜ื ื™ื ืื™ืŸ ืกืคืง ืฉืคื™ืชืจื•ืŸ ื”ืจื‘ื” ืžื”ื‘ืขื™ื•ืช ื‘ืงื•ื“ ื“ื•ืจืฉ ืžื—ืฉื‘ื”, ืžื™ื•ืžื ื•ืช, ื™ืฆื™ืจืชื™ื•ืช, ื”ื™ื›ืจื•ืช ืขื ืขื•ืœื ื”ืชื•ื›ืŸ ื•ืฉืœืœ ืžื™ื•ืžื ื•ื™ื•ืช ืฉืœ ืžืชื›ื ืชื™ื ื—ื›ืžื™ื. ืื‘ืœ ื”ืจื‘ื” ืคืขืžื™ื ื“ื•ื•ืงื ื”ื“ื‘ืจื™ื ื”ืงื˜ื ื™ื ื”ื ืืœื” ืฉื™ื›ื•ืœื™ื ืœืฉื ื•ืช ืืช ื”ื—ื™ื™ื ืฉืœื ื• ื‘ื™ื•ื ื™ื•ื. ื”ื ื” ื“ื•ื’ืžื” ืœืฉื™ื ื•ื™ ืงื•ื“ ืคืฉื•ื˜ ืžืกื•ื’ ื–ื”. ื”ื™ื” ืœื™ ืคืจื•ื™ืงื˜ knex ื‘ื• ืœื›ืœ ื˜ื‘ืœื” ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ื™ื” ืงื•ื‘ืฅ Repository ืฉื›ืœืœ ืงื•ื“ ืœืคืขื•ืœื•ืช ื‘ืกื™ืกื™ื•ืช ืขื ื”ื˜ื‘ืœื”. ืœื“ื•ื’ืžื” ืขื‘ื•ืจ ื˜ื‘ืœื” ืžื“ื•ืžื™ื™ื ืช ืฉืœ ืžืฉื™ืžื•ืช ื”ื™ื” ืœื ื• ืงื•ื‘ืฅ ืฉื ืจืื” ื‘ืขืจืš ื›ืš:
function create(db, task) {
  return db('tasks').insert(task).then(([createdId]) => ({ ...task, id: createdId }));
}

function select(db, ...columns) {
  return db('tasks').select(columns);
}

function destroy(db, task) {
  return db('tasks').where('id', task.id).del();
}

function update(db, which, what) {
  return db('tasks').where('id', which.id).update(what);
}

module.exports = { create, select, destroy, update };
ืื ืฉื™ื ืื”ื‘ื• ืืช ื–ื” ื›ื™ ื‘ืชื•ื›ื ื™ืช ื”ืจืืฉื™ืช ื”ื™ื™ืช ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื“ื‘ืจื™ื ื›ืžื•:
const newTask = await tasks.create(db, { text: 'new task', done: false });
await tasks.update(db, newTask, { done: true });

console.log(await tasks.select(db, '*'));
await tasks.destroy(db, newTask);
ืื‘ืœ ื”ื‘ืขื™ื” ืฉื›ืœ ืžื™ ืฉืจืฆื” ืœื”ื•ืกื™ืฃ ื˜ื‘ืœื” ื—ื“ืฉื” ื”ื™ื” ืฆืจื™ืš ืœื›ืชื•ื‘ ื’ื ืงื•ื‘ืฅ Repository, ื•ื›ืžืขื˜ ื›ื•ืœื ื›ืœืœื• ืืช ืื•ืชืŸ ืคืขื•ืœื•ืช ื‘ืกื™ืกื™ื•ืช, ื‘ื ื•ืกืฃ ืœืคืขื•ืœื•ืช ืกืคืฆื™ืคื™ื•ืช ืฉืœ ืื•ืชื” ื˜ื‘ืœื”. ื” Refactoring ื‘ืžืงืจื” ื”ื–ื” ื”ื™ื” ืงืกื•ื ื›ืžื• ืฉื”ื™ื” ืคืฉื•ื˜. ื™ื•ืฆืจื™ื ืงื•ื‘ืฅ ืื—ื“ ื‘ืฉื repo.js ืขื ื”ืงื•ื“ ื”ื‘ื:
module.exports = function(name) {
  function create(db, item) {
    return db(name).insert(item).then(([createdId]) => ({ ...item, id: createdId }));
  }

  function select(db, ...columns) {
    return db(name).select(columns);
  }

  function destroy(db, item) {
    return db(name).where('id', item.id).del();
  }

  function update(db, which, what) {
    return db(name).where('id', which.id).update(what);
  }

  return { create, select, destroy, update };
}
ื•ืขื›ืฉื™ื• ืžื™ ืฉืจื•ืฆื” ืจืง ืืช ื”ืคืขื•ืœื•ืช ื”ื‘ืกื™ืกื™ื•ืช ืžืกืชืคืง ื‘ืฉื•ืจื” ืื—ืช:
module.exports = require('./repo')('tasks');
ื•ื’ื ืžื™ ืฉืฆืจื™ืš ื™ื•ืชืจ ื™ื›ื•ืœ ืœืงื—ืช ืืช 4 ื”ืคืขื•ืœื•ืช ืž repo ื•ืœื”ื•ืกื™ืฃ ืขืœื™ื”ืŸ ืคืขื•ืœื•ืช ื—ื“ืฉื•ืช. ื•ื›ืŸ - ื”ื“ื•ื’ืžื” ืฉืœื™ ืขื‘ืจื” ื ื™ืงื•ื™. ื‘ืคืจื•ื™ืงื˜ ืืžื™ืชื™ ื—ื™ื‘ื•ืจ ื”ืงื‘ืฆื™ื ืœืชืฉืชื™ืช ืื—ืช ื“ื•ืจืฉ ื™ื•ืชืจ ืขื‘ื•ื“ื” ื•ืชืžื™ื“ ื™ื”ื™ื” ื™ื•ืชืจ ืžืกื•ื‘ืš ืžื›ืชื™ื‘ืช ืงื•ื‘ืฅ ืื—ื“ ื ื•ืกืฃ. ื•ืขื“ื™ื™ืŸ, ืžืกืคื™ืง ื‘ืŸ ืื“ื ืื—ื“ ืฉื™ืืจื’ืŸ ืžื—ื“ืฉ ืืช ื”ืชืฉืชื™ืช ื›ื“ื™ ืฉื›ืœ ื”ืžืขืจื›ืช ืชื–ื•ื– ื™ื•ืชืจ ืžื”ืจ.

ToCode
1 419
# ืชื›ื ื•ืช ืžื•ื ื—ื” ื“ื™ื‘ืื’ืจ ืชื›ื ื•ืช ืžื•ื ื—ื” ื“ื™ื‘ืื’ืจ ืงื•ืจื” ื›ืฉื™ืฉ ืœืš ืขืจื™ืžื” ืฉืœ ืงื•ื“ ืฉืืชื” ืœื ืžื‘ื™ืŸ, ื•ืืชื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืœืงื•ื“ ื”ื–ื” ืคื™ืฆ'ืจ ืื• ืœืชืงืŸ ื‘ื• ื‘ืื’. ื‘ืžืฆื‘ ื›ื–ื” ืื ื—ื ื• ื–ื•ืจืงื™ื ื ืงื•ื“ื•ืช ืขืฆื™ืจื” ื›ืžื• ืฉื“ื™ื™ื’ ื–ื•ืจืง ืจืฉืชื•ืช ืœืžื™ื, ื•ืžืงื•ื•ื™ื ืฉืื—ืช ืžื ืงื•ื“ื•ืช ื”ืขืฆื™ืจื” ืชืชืคื•ืก ืžืฉื”ื• ืฉื ืจืื” ื›ืžื• ื”ื‘ืขื™ื”. ื‘ืจื’ืข ืฉืชื•ืคืกื™ื ืืช ื”ื‘ืื’ ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืžืงื•ื ืฉื ืจืื” ืœื ื• ืœื ื ื›ื•ืŸ ื•ืžื•ืกื™ืคื™ื ืฉื ื˜ืœืื™, ื‘ืชืงื•ื•ื” ืœื ืœืฉื‘ื•ืจ ืงื•ื“ ืžืกื‘ื™ื‘. ืื—ืช ื”ื‘ืขื™ื•ืช ืขื ืชื›ื ื•ืช ืžื•ื ื—ื” ื“ื™ื‘ืื’ืจ ื”ื™ื ืฉื–ื• ืฉื™ื˜ืช ืขื‘ื•ื“ื” ืฉืžืฉืžื™ื“ื” ืืช ืขืฆืžื”. ื›ืฉืžืชื›ื ืชื™ื ืœื ืžื‘ื™ื ื™ื ืืช ื”ืžืขืจื›ืช ืขื“ ื”ืกื•ืฃ, ื›ืœ "ืชื™ืงื•ืŸ" ืžื›ื ื™ืก ืขื•ื“ ื‘ืื’ื™ื ื ืกืชืจื™ื ืื• ื™ื•ืฆืจ ืงืฉืจื™ื ื—ื“ืฉื™ื ื‘ื™ืŸ ืžืงื•ืžื•ืช, ื•ืœืื•ืจืš ื–ืžืŸ ื›ื›ืœ ืฉื”ื˜ืœืื™ื ืžืฆื˜ื‘ืจื™ื ื”ืงื•ื“ ื ื”ืคืš ืœื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœื”ื‘ื ื” ื•ืชื—ื–ื•ืงื”. ืคื•ื ืงืฆื™ื” ืคืฉื•ื˜ื” ืฉืœ 4-5 ืฉื•ืจื•ืช ื™ื›ื•ืœื” ืœืงื‘ืœ ื˜ืœืื™ ืฉื™ื•ืกื™ืฃ ืœื” ืขื•ื“ 3-4 ืฉื•ืจื•ืช, ื•ืื– ื›ืžื” ื—ื•ื“ืฉื™ื ืื—ืจื™ ื–ื” ืขื•ื“ ื˜ืœืื™ ื›ื–ื” ื•ืฉื ืชื™ื™ื ืื—ืจื™ ื–ื” ืื ื—ื ื• ื‘ื‘ื•ืจ ืฉืœ 300 ืฉื•ืจื•ืช ืขื ืื™ื ืกื•ืฃ if-ื™ื ืžืงื•ื ื ื™ื ืฉื›ืœ ืื—ื“ ืžื˜ืคืœ ื‘ืžืงืจื” ืงืฆื” ืžืื•ื“ ืกืคืฆื™ืคื™. ื‘ืขื™ื” ืฉื ื™ื” ืขื ืชื›ื ื•ืช ืžื•ื ื—ื” ื“ื™ื‘ืื’ืจ ื”ื™ื ืฉืฉื™ื ื•ื™ ื’ื™ืฉื” ื‘ืืžืช ืœื•ืงื— ื”ืžื•ืŸ ื–ืžืŸ. ืžืชื›ื ืชื™ื ืฉืจื•ืฆื™ื ืœื”ืชื—ื™ืœ ืœืชืงืŸ ืงื•ื“ ื‘ื’ื™ืฉื” ืฉืœ Refactoring ืžืชื•ืš ื”ื‘ื ื” ืžืขืžื™ืงื” ืฉืœ ื”ืงื•ื“ ื•ืฉืœ ื”ื‘ืื’ ื ื“ืจืฉื™ื ืงื•ื“ื ืœืงื‘ืœ ื”ื‘ื ื” ืžืขืžื™ืงื” ืฉืœ ื”ืงื•ื“, ื•ื‘ืžืขืจื›ื•ืช ื’ื“ื•ืœื•ืช ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ื—ื•ื“ืฉื™ื ื•ืืคื™ืœื• ืฉื ื™ื. ืื ื—ื ื• ื’ื ืฆืจื™ื›ื™ื ืชืฉืชื™ืช ื‘ื“ื™ืงื•ืช ื˜ื•ื‘ื” ื›ื“ื™ ืฉื ื•ื›ืœ ืœื“ืขืช ืื ื” Refactor ืฉืื ื—ื ื• ืžืฆื™ืขื™ื ืฉื•ื‘ืจ ื“ื‘ืจื™ื ื‘ืžืงื•ืžื•ืช ืื—ืจื™ื ื‘ืžืขืจื›ืช. ืขื•ื–ืจ ื’ื ืœืฉื‘ื•ืจ ืืช ื”ืžืขืจื›ืช ืœื—ืœืงื™ื ื™ื•ืชืจ ืงื˜ื ื™ื ื‘ื’ื™ืฉื” ืฉืœ Micro Services, ื‘ืžื™ื•ื—ื“ ื›ืฉืžื“ื•ื‘ืจ ืขืœ ืžืขืจื›ื•ืช ืฉื›ื‘ืจ ื‘ืื•ื•ื™ืจ ื›ืžืขื˜ ืขืฉื•ืจ ื•ืžืกืคืจ ืฉื•ืจื•ืช ื”ืงื•ื“ ืฉืœื”ืŸ ื ืกืคืจ ื‘ืžื™ืœื™ื•ื ื™ื. ื’ื ื”ื“ื™ื‘ืื’ืจ ื”ื›ื™ ื˜ื•ื‘ ื‘ืขื•ืœื ืœื ื™ื”ืคื•ืš ืืช ื”ืงื•ื“ ืฉืœื›ื ืœื ืกื‘ืœ. ืื ืชื›ื ื•ืช ืžื‘ื•ืกืก ื“ื™ื‘ืื’ืจ ื”ื•ื ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืœืคืชื•ืจ ื‘ืขื™ื”, ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืชื—ื™ืœ ืœื—ืฉื•ื‘ ืขืœ ืคื™ืชืจื•ื ื•ืช ืืžื™ืชื™ื™ื ืœื˜ื•ื•ื— ื”ืจื—ื•ืง.

ToCode
1 419
# ืคื™ื™ืง ืฉืืœืช ืชืจื’ื•ืœ ืคื•ืคื•ืœืจื™ืช ื‘ืงื•ืจืกื™ื ืžื‘ืงืฉืช ืžื”ืชืœืžื™ื“ื™ื ืœื”ืžื™ืจ ืžืกืคืจ ืžื›ืชื™ื‘ ืขืฉืจื•ื ื™ ืœืกืคืจื•ืช ืจื•ืžื™ื•ืช. ืื ืืชื ืœื ืžื›ื™ืจื™ื ืืช ืฉื™ื˜ืช ื”ืกืคื™ืจื” ื”ืจื•ืžื™ืช ืงื—ื• ื›ืžื” ืจื’ืขื™ื ืœื”ื™ื›ื ืก ืœืœื™ื ืง. ืื ื™ ืื—ื›ื”. ื”ืชืจื’ื™ืœ ื”ื•ื ืคืฉื•ื˜ ื•ืขื•ื–ืจ ืœื”ืชืืžืŸ ืขืœ ืคืขื•ืœื•ืช ื—ื™ืœื•ืง ื‘ืžืกืคืจื™ื ืฉืœืžื™ื ื•ืฉืืจื™ืช. ืื ื ื™ืฉืืจ ืจืง ืขื ื”ืžืกืคืจื™ื ื”ืงื˜ื ื™ื ืž-40 ืืคืฉืจ ืœื ืกื•ืช ืืช ื”ืคื™ืชืจื•ืŸ ื”ื‘ื:
symbols = (
        [10, 'X'],
        [5, 'V'],
        [1, 'I' ]
        )

def convert_to_roman(number):
    result = ''
    for i, r in symbols:
        result += r * (number // i)
        number = number % i
    return result
ืงื•ื“ ื”ื‘ื“ื™ืงื” ื”ื‘ื ืžืฉืชืžืฉ ื‘ืคื™ืชืจื•ืŸ ื•ืžืจืื” ืฉื”ื•ื ืขื•ื‘ื“ ืœืคื—ื•ืช ืขืœ 5 ืžืกืคืจื™ื:
result = {
        28: 'XXVIII',
        12: 'XII',
        6: 'VI',
        32: 'XXXII',
        21: 'XXI',
        }

for k, v in result.items():
    if convert_to_roman(k) != v:
        raise Exception(f"Conversion failed for {k}. Expected: '{v}'; Got: '{convert_to_roman(k)}'")

print("All OK")
ืื‘ืœ ื›ืฉื ื ืกื” ืœื”ืคืขื™ืœ ืืช ื”ื”ืžืจื” ืขืœ ืžืกืคืจ ื›ืžื• 19 ื ืงื‘ืœ ืฉื’ื™ืื”. ื”ื”ืžืจื” ื”ื ื›ื•ื ื” ืฉืœ 19 ืœืกืคื™ืจื” ืจื•ืžื™ืช ื”ื™ื XIX ืื‘ืœ ืืฆืœื ื• ื”ื•ื ื™ื•ืคื™ืข ื‘ืชื•ืจ XVIIII. ืื™ืš ืžืชืงื ื™ื? ื›ื™ื•ื•ืŸ ืื—ื“ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืœื ืกื•ืช ืœืฉื›ื ืข ืืช ื”ืžื—ืฉื‘ ืœื‘ื“ื•ืง ื›ืœ ืžื™ื ื™ ืืคืฉืจื•ื™ื•ืช ืœื‘ื ื•ืช ืืช ื”ืžืกืคืจื™ื, ื•ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ืฉืžื–ื”ื” ืฉ 19 ื”ื•ื 20-1 ื‘ื“ื™ื•ืง ื›ืžื• ืฉื”ื•ื 15+4 ืื‘ืœ ืฉ 20-1 ื™ื•ืชืจ ืงืฆืจ ืœื›ืชื™ื‘ื” ื•ืœื›ืŸ ื›ื“ืื™ ืœื”ืžื™ืจ ืœื–ื”. ื›ื™ื•ื•ืŸ ื™ื•ืชืจ ืงืœ ื”ื•ื ืœืจืžื•ืช:
symbols = (
        [10, 'X'],
        [9, 'IX'],
        [5, 'V'],
        [4, 'IV'],
        [1, 'I' ],
        )
ืื ื˜ื‘ืœืช ื”ืกืžืœื™ื ืฉืœื™ ื›ื•ืœืœืช ื’ื ืืช 9 ื•-4, ืื– ื›ืฉื”ืคื•ื ืงืฆื™ื” ืชืชืงืœ ื‘ 19 ื”ื™ื ืงื•ื“ื ื›ืœ ืชื™ืงื— ืืช ื” 10 ื•ืชื”ืคื•ืš ืื•ืชื• ืœ X, ื•ืื– ืืช ื” 9 ืฉื ืฉืืจ ืชื”ืคื•ืš ืœ IX. ื”ืคื•ื ืงืฆื™ื” ืœื ืžืกืคื™ืง ื—ื›ืžื” ื‘ืฉื‘ื™ืœ ืœื”ื‘ื™ืŸ ืฉ 9 ื–ื” ืขืฉืจ ืคื—ื•ืช ืื—ื“, ืื‘ืœ ื’ื ืœื ืฆืจื™ื›ื” ืœื”ื™ื•ืช. ืืช ื”ื—ื•ื›ืžื” ืืคืฉืจ ืœื”ืฉืื™ืจ ืœืจื•ืžืื™ื.

ToCode
1 419
# ื”ืคื•ื ืงืฆื™ื•ืช map ื• filter ืœืื•ื‘ื™ืงื˜ื™ื ื‘ JavaScript ื”ืคื•ื ืงืฆื™ื•ืช Object.entries ื• Object.fromEntries ื”ืŸ ืกื•ื’ ืฉืœ ืื•ืฆืจ ืœื›ืœ ืžื™ ืฉืื•ื”ื‘ ืชื›ื ื•ืช ืคื•ื ืงืฆื™ื•ื ืืœื™ ื• JavaScript ื›ื™ ื”ืŸ ืžืืคืฉืจื•ืช ืœื ื• ืœืกื’ื•ืจ ืืช ื”ืคืขืจ ื‘ื™ืŸ ืื•ื‘ื™ืงื˜ื™ื ืœืžืขืจื›ื™ื. ื‘ืžืขืจื›ื™ื ื”ืคื•ื ืงืฆื™ื•ืช map ื• filter ืžื’ื™ืขื•ืช ืžื•ื‘ื ื•ืช ืขื ื”ืžืขืจืš, ื›ืš ืฉืื ื™ืฉ ืœื™ ืจืฉื™ืžื” ืฉืœ ืžืกืคืจื™ื ืื ื™ ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœืงื‘ืœ ืืช ืจื™ื‘ื•ืขื™ ื”ืžืกืคืจื™ื, ืื• ืืช ืจื™ื‘ื•ืขื™ ื”ืžืกืคืจื™ื ื”ื’ื“ื•ืœื™ื ืž 50:
const numbers = [5, 6, 7, 8, 9, 10];
const squares = numbers.map(x => x * x);
const largeSquares = numbers.map(x => x * x).filter(x => x > 50);
ืื‘ืœ ืžื” ืœื’ื‘ื™ ืื•ื‘ื™ืงื˜ื™ื? ื”ื“ืจืš ื”ืงืœื” ืœื”ืคืขื™ืœ map ื• filter ืขืœ ืื•ื‘ื™ืงื˜ื™ื ื”ื™ื ืœื”ืคื•ืš ืื•ืชื ืœืžืขืจื›ื™ื, ืœื”ืคืขื™ืœ ืืช ื”ืœื•ื’ื™ืงื” ื•ืื– ืœื”ื—ื–ื™ืจ ื—ื–ืจื” ืœืื•ื‘ื™ืงื˜ื™ื. ืœื“ื•ื’ืžื” ืงื—ื• ืื•ื‘ื™ืงื˜ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืฉืžื’ื“ื™ืจ ืžืกืคืจ URL-ื™ื ื—ืฉื•ื‘ื™ื ืœื™ื™ืฉื•ื:
const urls = {
  google: 'http://www.google.com',
  ddg: 'http://www.duckduckgo.com',
  bing: 'http://www.bing.com'
}
ื‘ืขื–ืจืช Object.entries ื• Object.fromEntries ืื ื™ ืžืจื™ืฅ ื‘ืงืœื•ืช ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช ืขืœ ื”ืื•ื‘ื™ืงื˜. ืœืžืฉืœ ื‘ืฉื‘ื™ืœ ืœื”ืคื•ืš ืืช ื›ืœ ื” URL-ื™ื ืœ https ื•ืœื•ื•ืชืจ ืขืœ ื›ืœ ืžื ื•ืข ื—ื™ืคื•ืฉ ืฉื”ืฉื ืฉืœื• ืืจื•ืš ืž-4 ืื•ืชื™ื•ืช ืื ื™ ืžืจื™ืฅ:
Object.fromEntries(
    Object.entries(urls).
        map(([key, value]) => 
            [key, value.replace('http://', 'https://')]).
        filter(([key, value]) => key.length < 5))
ื•ืžืงื‘ืœ ื—ื–ืจื”:
{ ddg: 'https://www.duckduckgo.com', bing: 'https://www.bing.com' }
ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘ ืฉืจืฉืจืื•ืช ืืจื•ื›ื•ืช ื›ื›ืœ ืฉื ืจืฆื” ืฉืœ map ื• filter, ื›ืœ ืขื•ื“ ืžืงืคื™ื“ื™ื ืฉ map ืชืžื™ื“ ื™ื—ื–ื™ืจ ื–ื•ื’ื•ืช ืฉืœ ืžืคืชื— ื•ืขืจืš.

ToCode
1 419
# ื–ื” ื”ื™ื” ืฉื ืœืคื ื™ื™ ื•ืื•ืœื™ ืืช ื™ื•ื“ืขืช ื™ื•ืชืจ ืžืžื” ืฉื™ื“ืข ื”ืžืชื›ื ืช ืฉื›ืชื‘ ืืช ื–ื” ื‘ืžืงื•ืจ? ื•ืื•ืœื™ ืืช ืจื•ืื” ื™ื•ืชืจ ื“ื‘ืจื™ื ืžืžื” ืฉื”ื•ื ืจืื”? ื•ืื•ืœื™ ื”ืžืขืจื›ืช ื ืžืฆืืช ื”ื™ื•ื ื‘ืžืฆื‘ ืื—ืจ ืžืžื” ืฉื”ื™ืชื” ื›ืฉื”ืงื•ื“ ื”ื–ื” ื ื›ืชื‘ ื‘ืžืงื•ืจ? ื•ืื•ืœื™ ืืช ื™ื•ืชืจ ืžื ื•ืกื” ืžืžื” ืฉื”ื•ื ื”ื™ื” ื›ืฉื”ื•ื ื›ืชื‘ ืืช ื–ื” ื‘ืžืงื•ืจ? ื•ืื•ืœื™ ื”ื™ื•ื ืžืงื•ื‘ืœ ืœืขืฉื•ืช ื“ื‘ืจื™ื ืื—ืจืช? ื•ืื•ืœื™ ื›ืฉื”ืงื•ื“ ื™ื•ืคื™ืข ื‘ืžืงื•ื ื ื•ืกืฃ ืืคืฉืจ ื™ื”ื™ื” ืœื›ืชื•ื‘ ืื•ืชื• ื‘ืฆื•ืจื” ื’ื ืจื™ืช ื™ื•ืชืจ? ื›ืฉืืช ืžืฉื›ืคืœืช ืืช ื”ืงื•ื“ ืฉื”ื™ื” ืฉื ืงื•ื“ื ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื—ื“ืฉื” ืืช ื ื•ืชื ืช ืœื• ื—ื•ืชืžืช, ื—ื•ืชืžืช ืฉืœ ื›ืืŸ ื•ืขื›ืฉื™ื•, ื—ื•ืชืžืช ืฉืื•ืžืจืช "ื ื›ื•ืŸ ืœืขื›ืฉื™ื• ื–ืืช ื”ื’ื™ืฉื” ื”ื›ื™ ื˜ื•ื‘ื” ืœืขืฉื•ืช ื“ื‘ืจื™ื", ื•"ืื ื”ื™ื™ืชื™ ืžืชื—ื™ืœื” ืžื—ื“ืฉ ื•ื”ืงื•ื“ ื”ื™ืฉืŸ ืœื ื”ื™ื” ืฉื, ืขื“ื™ื™ืŸ ื”ื™ื™ืชื™ ื›ื•ืชื‘ืช ืื•ืชื• ื‘ื“ื™ื•ืง ื‘ืื•ืชื” ืฆื•ืจื”". ื›ืฉืืช ืžืขืชื™ืงื” ืืช ื”ืงื•ื“ ื”ื™ืฉืŸ ืœืžืงื•ื ื—ื“ืฉ ืืช ื ื•ืชื ืช ืฆื™ื•ืŸ 100 ืœืงื•ื“ ื”ื™ืฉืŸ. ืืช ื‘ื˜ื•ื—ื” ืฉื–ื” ืžื’ื™ืข ืœื•?