ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
1 419
# ืืืืช ืืืงืจ: ืฉืื ืื ืืจืฉืืืช
ืืชืืงืื ืืืฉื ื ืืฆืืจ 3 ืงืืฆืื. ืืจืืฉืื ืืื Dockerfile:
FROM ubuntu:22.04
WORKDIR /app
COPY . .
RUN chmod +x /app/startup.sh
CMD ["/app/startup.sh"]
ืืฉื ื ื ืงืจื startup.sh ืืืืื ืืช ืืชืืื ืืื:
#!/bin/bash
echo Hello World
ืืืฉืืืฉื docker-compose.yml ืขื ืืชืืื ืืื:
version: "3.9"
services:
app:
build: .
volumes:
- .:/app
ืื ื ืืคืขืื:
$ docker compose build
$ docker compose run
ืืืงืื ืืช ืืฉืืืื:
[+] Running 1/1
โ ฟ Container chmod-in-run-app-1 Recreated 0.2s
Attaching to chmod-in-run-app-1
Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/app/startup.sh": permission denied: unknown
ืื ืงืจื ืฉื? ืืื ื ืชืงื?
## ืืกืืจ ืืคืืชืจืื
ืงื ืืจืืืช ืฉืืืขืื ืืื ืฉืืงืืืฅ startup.sh ืืื ืืจืฉืืช ืืจืฆื, ืืื ืืขื ืืื ืืืืื ืืื ืื ืงืจื ืืืืจ ืื Dockerfile ืืืื ืืช ืืฉืืจื:
RUN chmod +x /app/startup.sh
ืืืชืขืืืื ืืคืขื ืืฉ ืืกืืจ ืคืฉืื - ื Dockerfile ืืฆืจ ืืืื', ืืขืชืืง ืืช ืืงืืืฅ startup.sh ืืชืื ืืืืื' ืืฉืื ื ืืืืื' ืืช ืืจืฉืืืช ืืืจืฆื. ืืื ืื ืื ื docker-compose.yml ืืืืืื ืืืคืืช ืืช ืชืืงืืืช ืืขืืืื ืื ืืืืืช ืืชืืจ volume ื /app. ืืืคืื ืื ืืจืก ืืช ืืงืืืฅ startup.sh ืขื ืืจืฉืืืช ืืืจืฆื ืืืกืชืืจ ืืืชื ืืืืฆืขืืช ืืงืืืฅ startup.sh ืฉืงืืื ืืืจ ืืชืืงืื ืืฉืืื ื ืืืื ืืจืฉืืืช ืืจืฆื.
ืืืืจื ืฉืืืื ืื ืืช ืืืขืื ืืคืืชืจืื ืืื ืืจืืจ - ืืืงืื ืืืขืชืืง ืืช startup.sh ืืชืื ืชืืงืืืช /app ืฉื ืืื ืืืกืชืจ, ืื ื ืืขืชืืง ืืืชื ืืชืืงืื ืืืจืช ืืืื ืืฆืืจืช ืืืืื', ืืืืืจ ืืฉื ื ืืช ื Dockerfile ืืชืืื ืืื:
FROM ubuntu:22.04
WORKDIR /app
COPY . .
COPY ./startup.sh /usr/local/bin/startup.sh
RUN chmod +x /usr/local/bin/startup.sh
CMD ["/usr/local/bin/startup.sh"]
ืขืืฉืื ืจืืข ืจืืข ืืืืื ืืงืืจืืื ืืขืจื ืืื - ืงืืงืืช ืืื. ืงืืื ืืืชื ืื ืืขืจืืช (ืื ืขืืืืช, ื ืืื, ืืื ืืขืจืืช) ืฉืื ืืฉืื ื ืืฉื ื ืืช startup.sh ืืชืืงืื ืขื ืืืืฉื ืืืืจื ืื ื ืื ืฆืจืื ืืื ืืช ืืืืฉ ืืช ืืืืื' ืืื ืืจืืืช ืืช ืืฉืื ืื, ืืืืื ืขืืฉืื ืืืืืื ืืืจืืฅ build ืืืืฉ ืื ืคืขื ืฉืืฉื ืื ืืช startup.sh. ืื ืืืช ืืขืื ืื ืขืืืจืื ืื ืื ืฉืฆืจืื ืื ืืคืฆื ืืช ืืกืงืจืืคื startup.sh ืืฉื ืืื - ืืืง ืืื ืฉืื ืืฉื ื /usr/local/bin, ืืืืืจ ืืชืืจ ื CMD ืฉื ืืืืื', ืืฉื ื ืืช ืืืจืฉืืืช ืืืจืืฅ ืืช /app/startup.sh ืืืืืง ืืฉื ื, ืืื /app/startup.sh, ืืืื ืื ืฉืืืื ืืืืคื ืืชืืงืืืช ืืขืืืื ืืืืฉื ืืืืจื ืืืชืขืืื ืืืืืืืืช ืขื ืื ืฉืื ืื.1 419
# ืื ืจืืื ืืช ืื
ืื ืจืืื ืืช ืื
ืื ืจืืื ืืช ืื
ืื ืจืืื ืืช ืื
ืื ืจืืื ืืช ืื
ืื ืจืืื ืืช ืื
ืจืืื ืืช ืื
ืชืืืื ืืืืืื ืืื ืืกื ืืื ืืขืืจ ืืืฆื ืฉื "ืื ืจืืื ืืช ืื" ืืืฆื ืฉื "ืจืืื ืืช ืื". ืืจืื ืืืจืื ืืชืืืืื ืื ืื ืฉืื ืืื ืืื ืฉืฆืจืืืื ืืืื ืืืจืื ืืชืคืชืื ืืืฉืื ืฉืื ืื ืฉืฆืจืื ืืื ืืงืฆืจ ืืช ืืืจื ืื "ืืืจืืืช ืืช ืื". ืื ืืคืขืืื ื ืืืจืื ืืืืืื ืืืืจืื ื ืฉืื ืจืื ืฉืืืจืื ืื ืคืชืืื ืืืื ื, ืืืืืืื ืื ืฉืื ืื ืจืง ืืจืื ืืช ืืืชื ืืืืื ืื ืืกืคืจื ืืช ืืืชื ืืกืืจ ืืื ืืื ืฉืืงืฉืื ืคืชืืื ืืืื ืื.
ืืืจ ืืืื ืื ืืืืื ืฉืืืข ืื ืืืืง.
ืืืจืื ืืืืื ืื ืฆืจืืืื ืืืคืฉ ืืช ืงืืฆืืจ ืืืจื ืื ืืช ืืืฆืืช ืืืืฉืืืช ืฉืืืจืื ืื ืืชืืืืืื ืืืื ื ืืช ืืืืืจ. ืืื ืืืืช. ืืจืื ืืืชืจ ืืฉืื ืืขืืืจ ืืื ืฉืื ืืืืืื ืฉืืกืืฃ ืื ืืจืื ืืช ืื, ืืืชืช ืืื ืืช ืืื ืืืชืืื ืืืกืืื ืขื ืฉืื ืงืืจื.
1 419
# ืืขืจืื ืืื ืืืืืืช ืืชืืืื ื Trade Offs
ืืฉืื ืื ื ืืืื ืืืืืจ ืืื ืื ืฉืืืช ืขืืืื ืืกืืืืื ืืื ืงื ืืืฆืื ืืช ืืืชืจืื ืืช ืืืืืืืื ืฉื ืืืชื ืืื ืื ืืช ืืืกืจืื ืืช ืืืืืืืื ืฉืื. ืืืืืื ืคืฉืืื ืื ืื ื ืืชืืื ืืื React ื Solid.JS, ืื ืจืื ืืชืืฆืืืช ืืืืคืืฉ ืืืืื ืฉื ืืืฉืืืื ืืชืืืกื ืืื ืฉืจืืืงื ืืืชืจ ืคืืคืืืจื ืืืื ืืฉ ืืืชืจ ืกืคืจืืืช ืืืงืืืืช ืืืืื ืืื; ืืฉืกืืืื ื ืืชื ืืืฆืืขืื ืืืืื ืืืชืจ ืืืงืื ืฉืื ืจืืืงืืืื ืืืชืจ.
ืืื ืื ืื ื ืืืืข ืืืฆืข ืืขืจืื ืืื ืืืืืืช ืฉื ืืื ืืืืจื ืฉืื ืืื ืืืจื ืืื ืื ืืืชืื ืคืืกื ืืืืื ืืื ืืืชืืื ืืื ืืคืจืืืงื. ืืืฉืืื ืื ืืจืื ืืืชืจ ืืขื ืืื ืืืื ืืืฆืื ืืช ื Trade Offs, ืืืืืจ ืืช ืืืชืจืื ืืช ืืืืกืจืื ืืช ืืกืคืฆืืคืืื ืฉื ืืืื ืืคืจืืืงื ืฉืื. ืื ืื ื ืืงืื ืืื ืื ื ืืฉืื ืืฉืืื ืื.
ืื ืืืกืจืื ืืช ืฉื ืฉืืืื ืืืืคืกืงืจืืคื ืืคืจืืืงื? ืืื ืื ืืฉืคืืข ืขื ืงืฆื ืืคืืชืื? ืืื ืื ืืฉืคืืข ืขื ืืขืืืื ืฉืื ืขื ืืชืื ืชืื ืืืฆืื ืืื? ืืื ืื ืืฉืคืืข ืขื ืืืืก ืืชืื ืชืื ืืืฉืื ืืฆืืืช? ืืื ืื ืืฉืคืืข ืขื ืืืจืืฉื ืฉื ืืืืชืืงืื? ืืื ืื ืืฉืคืืข ืขื ืืืคืฉืจืืช ืืฉืืชืืฃ ืงืื ืืื ืืขืจืืืช?
ืืืืืื ืืืจืืช - ืื ืืืกืจืื ืืช ืฉื ืืืืคืกืงืจืืคื ืืคืจืืืงื ืืกืคืฆืืคื ืฉืืื?
ืืืืจืืช ืฉืื ื ืฉืืข ืคืจืืืงืกืื, ืื ื ืืจืื ืืืชืจ ืจืืืข ืืฉืื ื ืจืืื ืืฆื ืืืชืจืื ืืช ืื ืืช ืืืกืจืื ืืช ืฉื ืฉืืืช ืืขืืืื ืฉืื ื ืจืืฆื ืืืืืจ. ืืื ืืจืื ืคืขืืื ืื ืงื ืืืฆืื ืืืชื. ืื ืื ื ืฉืื ืืช ืืืืคืกืงืจืืคื ืืฆื ืื ืืืืจ ืืจืืืงื, ืืคืจืกืืืื ืขื ืืืจืกื 18 ืฉื ืจืืืงื ืืกืคืจืื ืืืชืืืืืช ืขื ื Concurrent Rendering ืืืื ืื ืขืืืจ ืืฉืคืจ ืืืฆืืขืื. ืืงื ืื ืืจืื ืืื ืืืืื ืฉ Render Tearing ืืืช ืืขืื ืืืืชืืช ืืืื ืืฉืคืืขื ืขื ืฉืืืช ืืขืืืื ืฉืื ืื ืื ืืืื ืื ื ืื ืืฉืชืืฉ ื Concurrent Rendering.
ืืื ืื ืืชื ืืืจืืื ืขื ืืืืื ื ืืืื ืืืืืืช, ืืืฅ ื POC ืืืื ืืืืฉ ืฉืืื ืืขืฉืืช ืืืืฅ ืืืืืจ ืืื ืืืฆืื ืืื ืฉืืืชืจ ืืกืจืื ืืช ืืจืืฉ. ืื ืืืขืื ืขื ืืกืจืื ืืช ืืื ืฉืื ื ืืืื ืืืคืชืืข ืืืืืง ืืจืืข ืืื ื ืืื.
ื .ื. ืืกืงืืจื ืืืืช ืขื ืจืืกื:
https://www.bunniestudios.com/blog/?p=6375 ืืื ืืืืื ืืขืืื ืืกืงืืจื ืืื ืืืืืืช ืฉืืฆืืื ืื ืืช ืืขืืืืืช ืืื ืจืง ืืชืจืื ืืช ืืืืืงืื ืื ืืกืจืื ืืช ืืืืืงืื.
1 419
ืืงืืืฅ ืืฉืืืฉื ืืื
src/App.js (ืืื jsx, ืื ืืื ืืืชืจ jsx) ืืืื ืืงืื ืืช ืืชืืื ืืื:
import { html } from 'htm/react';
import React from "react";
export default function App() {
const [count, setCount] = React.useState(0);
function inc() {
setCount(c => c + 1);
}
return (
html`<div>
<p>Welcome To The Future</p>
<button onClick=${inc}>Value: ${count}. Click To Increase</button>
</div>
`
);
}
ืืื ืืื ืจืืืงื ืจืืื ืืืืจื, ืืืฅ ืื JSX ืฉืืคื ื Template Strings ืฉืืืื ืืืืื ืื.
## ืืจืฆื
ืฉืืืฉืช ืืงืืฆืื ืืืื, ืืื ืืืืคืืง, ืืื node.js, ืืื ืืืืื ืืืื ืฉืื ืืจื ืกืคืืืฆืื, ืจืง ืฉืืืฉื ืงืืฆืื - ืืกืคืืงืื ืืฉืืื ืืงืื ืืืฉืื ืจืืืงื ืืืคืืคื. ืื ื ืืคืขืื ืฉืจืช ืืงืืื ืขื ืคืืจื 8080 ืขื ืืคืงืืื:
$ npx http-server
ื ืื ืก ืืืืคืืคื ืืฉืจืช ืืงืืื ืขื ืืคืืจื ืืืชืืื ืืืงืื ืืคืชืืจ ืฉืืจืื ืืื ืคืขืืื ืืืฆืชื ืขืืื.
## ืืืฉืืืช ืืขืชืื
ืืื ืืืฉืืืช ืืืขืจืืช ืืืจื ืืชืืืช ืืงืื ืืื:
1. ืืืชืจ ga.jspm.io ืืื ืื ืฉืืืืฉ ืืช ืงืืฆื ื JavaScript ืืคืืขื ืืืื ืืชืคืงื ืืชืืจ CDN. ืื ืืืื ืืืืืจ ืืช ืืืืื ืืคืืชืื ืืื ืืคื ื ืขืฉืจ ืฉื ืื, ืืฉืืฉืืื ืืืฉืชืืฉ ืืกืคืจืื ืืืื ื ืคืฉืื ืืืืืงืื ืืช ืืืื ืง ืืืื ื html. ืื ื ืืชืืจ ืืขืฆืื ืฉืืจืื ืื ืฉืื ืืขืืืคื ืขืืืื ืืฉืืืจ ืืช ืื ืืชืืืืืช ืืืื ืืฆืื ืืคืจืืืงื ืื ืขื cdn ืืฉืืืืชื, ืืื ืืกืืจ - ื Import Maps ืื ืืืคืช ืืืืคื ืืื ืืืื ืืช ืืืืืืืื.
2. ืืืื ืืขื ืืื ืืจืืืช ืื ืืืืจื ืืื ืืคืฉืจ ืืืื ืืืฆืื ืืฆืืงื ื webpack ื babel, ืืฉืจืื ืื ืฉืื ืขืืฉืื ืืคืฉืจ ืืขืฉืืช ืืืื ืืฉืืจืืช ืืืคืืคื. ื ืืื - scss ืื ืืืื ืื TypeScript ืืฉ ืืชืจืื ืืช, ืืื ืืืืืจ ืฉื ืืืืื ืืืื ืืชืืื ืืืืืช ืืฉืืขืืชื ืืื ืฉืืืืืจื ืืืื ืืคืฉืืื ืืืชืจ ืืืืื ืืชืช ืืขื ื ืืื ืืจืื ืืฆืจืืื.1 419
# ืืืืื ืืืจื ืืืืื
ืืช AMD ืืืจืชื ืืืืฆืขืืช require.js ืฉืืืชื ืืืื ืืืืืจ ืฉื ืช 2012 (ืื ืฉื ืงืจื, ืขืืื ื IE6) ืืื ืจืื ืื ืงืฆืช ืงืืื. ืื ืฉ require ืขืฉืชื ืืื ืืืคืฉืจ ืืื ืืืชืื ืืชืื ืงืืืฅ JavaScript ืืื ืคืงืืื ืฉืชืืขื ืงืืืฅ JavaScript ืืืจ. ื ืืื, ืืคื ื require ืืืชื ืืช dojo ืฉืขืืื ืขื ืืืชื ืื ืื ืื ืืื ืื ืืืจ ืืืชืงืืืื.
ื Require ืืื ืืื ืืืคืืืืืืฆืื ืฉืืืงื ืงืืฆืื ืฉืืชืืืื ื AMD ืืืืื ืืืชื ืืื ืืงืืืฅ ืืื ืืืื ืืฆืืื ืืฉืคืจ ืืช ืืื ืืขืื ืช ืืขืืื, ืื ืฆืจืื ืืฉืืื ืคืืืช ืงืืฆืื ืืืคืืคื. ืืืจื ืื ืืืืขื grunt, gulp, webpack ื babel ืืื ืื ื ืขืืจื ื ืืืฉืชืืฉ ืืืชืื ื import/export ืืืืจืืฅ ืงืื ืขื ืงืืฆื ื JavaScript ืืชืื ืฉืื ืืืืคืืืืืืฆืื.
ืืจืฆืช ืืงืื ืืืคืฉืจื ืืืฆืืจ ืชืืืืจืื ืืืฉืื ืืื TypeScript ื JSX, ืฉืืชืงืืคืืื ื JavaScript ืืืกืคืงืื ืืืืื ืืืื ืืืชืจ ืืืชืื ืชืื. ืืืื ืฉืืืืื ืืจืฆื ื ืืืืคืืง ืื ืืืชื ืขืืืช ืืฉืืืืฉ ืืืืื ืืื. ืืกื ืืื ืขืื ืคืืืืื ืืืชืงืื.
ื ืืืื ืงืืืื ื 2022 ืืืขืืื ืืฉืชื ื ืฉืื. ืืืื ืืคืืคื ืื ืชืืืืื ืชืืืื ืืืื ื ES Modules ืืืืขืื ืช ืงืืืฅ JavaScript ืืชืื ืงืืืฅ ืืืจ. ืื ืืกืฃ ืชืงื HTTP/2 ืชืืื ื Server Push ืฉืืืืจ ืฉืืื ืืืชืจืื ืืืืื ืช ืืืฆืืขืื ื Bundling.
ืืืื ืื ืื ื ืงืืื ืืืงืจ ืืื ืืืืืื ืฉืื ืืื ื ืฉืืงืฉืงืฉ ืืืื - ืฉื JSX, ืฉืืืจื ืื ื ืืืชื ืืื ืชืืกืคืช ืืืืื ืฉืื ืขืืื ืืืื, ื ืฉืืจ ืืกืืื ืืืืืื ืืืืฉืื ืืืฉืชืืฉ ืืื ืืงืื ืกืืจืืงืฆืื ืฉื ืืืืคืืง ื babel. ืืืืืื ืืชืืื ืืืกืชืืื ืฉืื.
ืืกืคืจืื htm ืืฆืืขื ืืื ืฉืจืืฆื ืืืืชืจ ืขื ืฉืื ืืงืืืคืืืฆืื ืืจื ืืืืฆื, ืืืืฆืขืืช ืชืืืืจ ืฉื ืจืื ืืืื ืืืื ื JSX ืืื ืขืืื ืืืคืืคื. ืฉืืืื ืฉื htm ืขื ืื ืฉืืจ ืืืืืืฉืื ืืขืืื ื web ืืืคืฉืจ ืื ืื ืฉื ืืคืืืงืฆืืืช ืจืืืงื ืืืื ืืื ืงืืืคืืืฆืื. ืืืื ื ืจืื ืืื ืื ืขืืื.
## ืงืื ืืคืจืืืงื
ืื ื ืืืชื ืงืืืฅ ืืฉื index.html ืขื ืืชืืื ืืื:
<!DOCTYPE html>
<html lang="en">
<head><title>Hello World</title></head>
<body>
<main id="app"></main>
<script type="importmap">
{
"imports": {
"htm/react": "https://ga.jspm.io/npm:htm@3.1.1/react/index.module.js",
"react": "https://ga.jspm.io/npm:react@18.1.0/dev.index.js",
"react-dom": "https://ga.jspm.io/npm:react-dom@18.1.0/dev.index.js"
},
"scopes": {
"https://ga.jspm.io/": {
"htm": "https://ga.jspm.io/npm:htm@3.1.1/dist/htm.module.js",
"object-assign": "https://ga.jspm.io/npm:object-assign@4.1.1/index.js",
"scheduler": "https://ga.jspm.io/npm:scheduler@0.20.2/dev.index.js",
"scheduler/tracing": "https://ga.jspm.io/npm:scheduler@0.20.2/dev.tracing.js"
}
}
}
</script>
<!-- ES Module Shims: Import maps polyfill for modules browsers without import maps support (all except Chrome 89+) -->
<script async src="https://ga.jspm.io/npm:es-module-shims@1.5.1/dist/es-module-shims.js" crossorigin="anonymous"></script>
<script type="module" src="src/main.js"></script>
</body>
</html>
ืืืืง ืืจืืฉืื ืืืืจ ืืืืืช ืืื ืืืืจ - ืืื ืื ืื ื ืงืจื Import Maps ืืืื ืืืืจ ืืืคืฉืจ ืืขืชืื ื ืืืื ืชืืืืืช ืืกืืืจ ืืชืื ES Modules. ืืจืืข, ืืืขืื ืขื ืชืืืืืช ืืื ืฉืืฉืืชื ืืืชืืื:
import React from 'react';
ืืืคืืคื ืืื ืืืฉื ืืืืคื ืืืืื ืืช react. ื node ืื webpack ืื ืื ื ืืฉืชืืฉืื ืืงืืืฅ package.json ืืฉืืื ืืืคืืช ืืช ืืฉื ืืื ืืงืืืฅ ืืืืชื, ืืืชืื ืืคืืคื Import Maps ืืื ืืฆืขื ืืืช ืืืืืืฉ ืืื ืื ืื ืื. ืืคืฉืจ ืืงืจืื ืขืืื ืืื:
https://github.com/WICG/import-maps
ืืืืจ ืืืฉืื ืืื ืฉืืจืืข ืืฉ ืคืืืืคืื ืฉืขืืื ืืืจืื ืืืื ืฉืืืืขืื ืืงืืช ืงืืืฅ package.json ืืืืคืื ืืืชื ื Import Maps, ืืื ืืืฉืง ืืจืคื ืืื ืืืื ื ืืื ืืืช Import Maps ืฉืืคืฉืจ ืืืฆืื ืืงืืฉืืจ ืืื:
https://generator.jspm.io/#.
ืืื ืืืืง ืฉื ื Import Maps ืืงืืื ื package.json ืฉืืืื ืื ื ืืคืจืืืงื webpack ืงืืืกื.
ืืืฅ ืืื ื ืืฉ ืกืงืจืืคื ืืฉื main ืฉืืืืืจ ืืืืืื ืืืื ื ืงืืืช ืืื ืืกื ืืืืฉืื.
ืืงืืืฅ src/main.js ืื ื ืืืชื ืืช ืืชืืื ืืื:
import { html } from 'htm/react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(html`<${App} />`, document.querySelector('#app'));
ืืคื ืื ืื ื ืืชืืืืื ืืจืืืช ืืช ืกืคืจืืืช htm ืืคืขืืื. ืืคืฉืจ ืืจืืืช ืฉืืงืื ืืื ื JSX ืืื ืืื ืื ืืืื ืืืื ืืืืืช ืืฉืืืืฉ ื Template Strings. ืืื, ืืืฅ ืืื ืืคืฉืจ ืืื ืืงืืืช ืืืขืืช ืืืืฉืื ืฉืื ืื ื ืืคืจืืืงื ืืืืคืืง. ืื ื import-ืื ืขืืืืื ืจืืื ืืืืจื.1 419
# ืืืจืื: ืืื ืืืืืง ืคืจืืืงื vite ืขื vitest
ืืคื ื ืืื ืืืืฉืื ืืขืืจืชื ืืื ืืืืื ืจ ืขื ืืื, ืืื ืฉืืจืช ืคืงืืื ืืื ืืืช ืคืจืืืงืื ืืื. ืืืื ืืฉ ืชืคืจืืืื ืืคืื ืืื ืืืฆืืจ ืคืจืืืงืืื ืืื ืืื ื ืกืืืื (ืจืืืงื, ืืื, ืกืืื), ืืื ืืื ืื ืชืืื ืืกืคืจืืืช ืืืจืืช ืืืืฆืขืืช ืงืื ืคืืืืจืฆืื ืืืฉื ืกืืืื.
ืืฉืืขืืจืชื ืืช ืืืืืื ืจ vitest ืืื ืขืืืื ืืชืืืืช ืืืจื ืืื ืืืชื ืืจื ืกืื ืืจืืืช ืืืชืื ืืืืงืืช ืืคืจืืืงืื ืืื. ืื ืืฉืชื ื ืืืืจืื ื ื vitest ืืกืคืง ืืื ืืืจืฆืื ืืืื ืขื ืืื, ืชืืืืจ ืืืขื ืืื ืืื ืฉืื ืื ื ืืืืจืื ื jest ืืขืื ืืื ืคืืฆ'ืจืื ืืขื ืืื ืื ืืื ืืจืฆืช ืืืืงืืช ืืืงืืื ืื ืืชืืืช ืืืืงืืช ืืืืฃ ืืงืื.
ืืืืจืื ืื ืื ื ืืฆืืจ ืืชืื ืคืจืืืงื react ืขื vite, ืืชืงืื ืืช vitest ืืืืชืื ืืช ืืืืืงื ืืจืืฉืื ื ืืคืจืืืงื. ืืืื ืื? ืื ื ืื ืื.
## ืืฆืืจืช ืคืจืืืงื ืจืืืงื ืขื vite
ืฉืื ืจืืฉืื ืืื ืืฆืืจืช ืคืจืืืงื ืจืืืงื ืืืฉ ืขื ืืื. ืื ื ืืจืืฅ ืืฉืืจืช ืืคืงืืื:
$ npm create vite@latest my-react-app
ืืืืจ ืืชืคืจืื ืืช ืืืคืฉืจืืช react ืืืืจื ืื ืฉืื react ืืืคืขืื ืืช ืฉืืืฉืช ืืคืงืืืืช ืฉืืืคืืขืืช ืขื ืืืกื ืืื ืืืืื ืฉืืคืจืืืงื ื ืื ื:
$ cd my-react-app
$ npm install
$ npm run dev
ืืื ืืจืื ืฉืจืช ืฉืืืืื ืืคืืจื 3000 ืืืฆืื ืืืื ืืกืชืืื ืฉื ืจืืืงื ืืื ืขื ืืคืชืืจ ืืื ื ืืืืฆืืช. ืื ืืืืฆื ืขื ืืืคืชืืจ ืืขืื ืืช ืืืกืคืจ ื-1.
## ืืืกืคืช vitest
ืืฉืืื ืืืชืื ืืืืงืืช ืืคืจืืืงื ืื ื ืืืกืืฃ ืืช ืืืืกื ืืืืฆืขืืช ืืจืฆืช:
$ npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event
ืื ืืกืฃ ื vitest ืืชืงื ืชื ืื ืืช jsdom ืืื ืฉืืืื ืืืืืง ืืืจืื ืฉืงืฉืืจืื ืืืคืืคื (ืืืืืงืืช ืจืฆืืช ื node.js), ืืืช ืื ืืืืืื ืฉื react-testing-library ื jest-dom. ืืช ื'ืกื ืขืฆืื ืื ื ืื ืฆืจืื ืืืชืงืื ืื ืื ื ืื ืืฉืชืืฉ ืื. ืืืืกื ืืฉืชืืฉ ื chai, ืืื ืืกืชืืจ ืฉ jest-dom ืืืื ืืืชืืืจ ื chai ืืืื ืืขืืื.
ืืืจื ืืืชืงื ื ืื ื ืืืฉืื ืืขืืืื ืืืืืจืืช. ืืงืืืฅ vite.config.js ืื ื ืืืกืืฃ ืืืืง test ืขื ืืชืืื ืืื:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
test: {
environment: "jsdom",
globals: true,
setupFiles: 'src/setupTests.js',
},
})
ืืืงืฉืชื ืืืจืืฅ ืืช ืืืืืงืืช ืืชืื jsdom ืืืคื ื ืืจืฆืช ืืืืืงืืช ืืืจืืฅ ืงืืืฅ ืืฉื src/setupTests.js. ืื ื ืืืฆืจ ืื ืืช ืืงืืืฅ ืืื ืืืืชื ืืชืืื:
import '@testing-library/jest-dom'
ืืฉืืื ืืืขืื ืืช jest-dom ืืคื ื ืฉืืจืืฆืื ืืช ืืืืืงืืช. ืืื ืื, jest-dom ืืฆืคื ืืืฆืื ืืช expect ืืชืืจ ืืฉืชื ื ืืืืืืื ืฉืืืจ ืืืืืจ ืืขืืื ืืืืื ืื ืืืกืคืชื ืืช globals: true ืืืืืจืืช ืืืืืงืืช (ืฉืืขืืื ืืื ืฉืืืชืจ ืืืื ืืื ืฉืื ื ืจืืื ื jest).
ืฉืื ืื ืืืืจืืช ืืืจืื ืืื ืืงืืืฅ package.json ืฉื ืื ื ืืืกืืฃ ืกืงืจืืคื ืฉืืจืืฅ ืืช ืืืืืงืืช:
"scripts": {
"test": "vitest",
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
## ืืชืืืช ืืืืงื ืจืืฉืื ื
ืื ืืื ืืืื ืืืชืงื ืืช ืืขืืฉืื ืืคืฉืจ ืืืฆืืจ ืงืืืฅ App.test.jsx ืขื ืืืืืงืืช ืืจืืฉืื ืืช:
import { screen, render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import App from './App';
describe('App', () => {
it('shows Hello text', () => {
render(<App />);
expect(screen.getByText('Hello Vite + React!')).toBeInTheDocument();
});
it('increases the value when button is pressed', async () => {
render(<App />);
const btn = screen.getByRole('button', { name: /count is/ });
await userEvent.click(btn);
expect(btn).toHaveTextContent('count is: 1');
});
});
ืืืื ืขื ื'ืกื ืืฉืืื ืืืจืืฅ ืืช ืืืืืงืืช ืืกืคืืง ืืืคืขืื:
$ npm run test
ืืืืคื ืืืืืืื vitest ืืขืื ืืืชืืื ืืืจืืฅ ืืช ืืืืืงืืช ืืืืฉืื ืืืจืืฅ ืืืืฉ ืืช ืืืืืงืืช ืืจืืืื ืืืืช ืื ืคืขื ืฉืชืขืืื ื ืืช ืืงืื.1 419
# ืืืค ืืื: ื ืืืืื ื push
ื ื ืขืืชื ืืืืฅ ืืืืช ืืฉืืืข. ืื, ืืฉ ืื ืืืช ืืืืช ืฉืืจืืข ืฉืกืืืจืื ืืืชื ืืื ื ื ืขืืช, ืืืื ืืฉืื ืื ืกืืจืชื ืืช ืืืืช ืืฉืืืคืชืืืช ืืื ืืชืื ืืืืช. ืืืื ืืืชื ืืคืื ืืืื ืงืืจื ืื ื git ืื ืคืขื ืืืจื ืฉืื ื ืขืืฉื commit - ืืืคืขื ืื ื ืืืืจ ืขื push.
ืกืืื ืืืช ืืืคืขืื push ืืื ืืืจื ืงืืืื ืืื ืืืืืืืื. ืืคืขืืช push ืืืืคืช ืืช ืืืืืจ ืืฉืจืช ืืจืืืง ืฉืืืื ืืชืืื ืืชืืืจืืช ืืืืื ืืืชืจ ืืืืืฉื ืฉืื. ืื ืื ืืฉื ืืื ืืฉืื ืืื ืื ื ืืฆืืข ืืืืฆืจ ืื ืื ืื ืืืืืืื ืืื ืืืชืจ ืขื ืชืื ืช ืืขืืืื ืฉืืื, ืื ืืืฆืืจ ืืืืจ ืืจืืืง ืฉืืฉืืฉ ืืชืื ืจืง ืืฆืืจื ืืืืื ืืื ืืฆืืจื ืฉืืชืืฃ ืงืื ืขื ืื ืฉืื ืืืจืื. ืืื - ืืืจ ืืชืืชื ืืขืืจ ืืืจืื ืืื ืืขืืื ืขื ืืกืคืจ ืืืืจืื ืืจืืืงืื ืืืื.
ืกืืื ืฉื ืื (ืื ืืืชืจ ื ืืื ืืืืืฅ) ืืืคืขืื push ืืื ืืืจื commit ืืื ืืฉืืื ืืืคืขืื ืืืื pipeline ืฉืืืืืง ืืช ืืฉืื ืื ืขื ืฉืจืช ืืจืืืง. ืื ืคื ืื ืืคืฉืจ ืฉืืื ืืืืฆืจ ืืืืจ ืืื ืขืืืจ ื pipelines ืืืืืืงืืช, ืืืืืจ ืฉื ื, ืืืืชื, ืืฆืืจื ืฉืืชืืฃ ืงืื ืขื ืื ืฉืื ืืืจืื.
ืืื ืื ืืืื ืฉืืืืกืจืื ืืืคืขืืช push ืืื ืืืจื ืืงืืืืืื ืืื ืฉืืจืืข ืฉืขืฉืืชื push ืื ื ืืืจ ืื ืืืื ืืขืจืื ืืช ืืงืืืืืื. ืืงืฆืช ืืื ืืฉื ื ืขืืื ืืืืฅ ืืืืช, ืื ืคื ืืืืืง ืืฉื ืื ืฉืื ื ืืืืฅ ืขื ื Enter ืคืชืืื ืื ื ืืืื ืฉืขืืืฃ ืืื ืืืคืจืื ืืช ืืฉืื ืื ืืฉื ื ืงืืืืืื, ืื ืฉืฉืืืชื ืืืืกืืฃ ืงืืืฅ ืืงืืืื, ืื ืฉืืืชื ืื ืืืื ืฉืืืืช ืืชืื ืืงืื ืื ืืืืืขืช ืืงืืืื. ืจืง ืฉืื ืฉืืคื ื ืฉื ืื ืืื ืขื ืืื ืคืฉืื ืฉื ืืคืชืื ืืช ืืืจืื ืืืืืฆืื ืืช ืืืคืชืืืช, ืืืคื ืืขืกืง ืืจืื ืืืชืจ ืืกืืื ืืืจื ื push, ืื ืขืืฉืื ืฆืจืื ืืจืืฅ ืืื ืืื ืฉืื ืฉืืืขืืช ืงืืืื ืืช ืืงืืืื ืืื ืืืืงืฉ ืืื ืืืชืขืื ืืื ื ืื ืืืืืืจ ื pull ืืื ืื ืื ื ืืืื ืืืจืืก ืืช ืืืืืจ ืืืจืืื.
ืืืืค ืืกืืื - ืฆืขื ืืืจื ืืืืืื ื push ืืืื ืืืืืช ืืืื ืืช ื upstream tracking ืฉื ืืขื ืฃ ืฉืืชื ืขืืืืื ืขืืื, ืืื push ืืื ืฉื ืฉื ืขื ืฃ ืื ืืขืืื. ืืืืืจ ืขื ืขื ืฃ ืงืืื ืฉืืืจ ืขืืงื ืืืจ ืขื ืฃ ืืจืืืง ื ืคืขืื:
$ git branch --unset-upstream
ืืขืืฉืื ื ืืกืืื ืืขืฉืืช push ืืืืฉื ืขื ืืืืืขื:
fatal: The current branch mybranch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin mybranch
ืืชื ืขืืืื ืืืืืื ืืขืฉืืช push ืื ืืชื ืืฉืืื ืขืื ืฉืื ืจืขืืื ืืื ืชืื ืฆืืื ืฉื ืืขื ืฃ ืืฆืืจื ืืคืืจืฉืช, ืืืงืจื ืฉืื ืื:
$ git push origin mybranch
ืืืืชืจืื ืืื ืฉืืืจ ืื ืืคืฉืจ ืืืชืื ืืืขืืช git push ืืื ืืืจื ืงืืืื ืืืืจื ืื ืืืืื ืืช ืืื ืืฉืฆืจืื ืืชืงื ืฉืืืืช ืืชืื.1 419
ืืชืืขืื ืฉื ืคืืืชืื ืืฉ ืืฃ ืืืืข ืืขืืื ืขื ืขืืืื ืขื ืชืืจืืืื ืฉืืืื ืืช ืื ืืืืืืืืช ืืืื ืืืจืื ืืืชืจ:
https://docs.python.org/3/library/datetime.html
1 419
# ืืชื ืชืืจื? ืกืงืจืืคื ืคืืืชืื ืคืฉืื ืืืืฉืื ืืื ืืืชื ื
ืืืืชื ืืืฉืจื ืืคื ืื ืืฉืืืข ืืืืฉ ืืจืืื ืืืืืืชื ืฉื ื ืืืจืื - ืืืงืืื ืืืชืจ ืืื ืฉืฆืจืื ืืฉืื ืืืชืจ ืืื ืฉืืคืจืืื ืฉืื ืื ืืืฉืืจื ืืืืืจ ืืืืืืืจื (ืื ืืืจืืื ืชืงืฃ ืจืง ืืืืฉ ืฉื ืื). ืืื ื ืืืืชื ืืืื ืฉืื ื ืืืกื ืืื ืืงืื ืฉื. ืืคืืืช ืืงืืื ืืื ืฉืืคืืื ืืืจื ืฉืืืืื ืื ืชืืจ ืืฆื ืฉื ื ืืจืืฉ, ืขืืืื ืฆืจืื ืืืืืช ืืืื ืฉืขื ืขื ืฉื ืื ืกืื. ืืฉืืื ืืืชืืืื ืขื ืืฉื ื ืืืฉืืื ืื ืืืฉืชืขืื ืืฉืขื ืืืืช, ืืชืืชื ืกืงืจืืคื ืคืืืชืื ืงืฆืจ ืฉืขืืืจ ืืืืื ืืื ืืื ืืืชื ื ืขืื ื ืฉืืจ ืื. ืืื ืื ืืืืืง ืืื ืื ืืคืฉืจ ืืืืื ืืื ื ืืืจ ืื ืฉื ืืื ืืืื ืืืคืื ืืืื ืื ืืคืืืชืื, ืื ืื ื ืืฉืชืฃ.
## ืืื ืขืืืืื ืขื timedelta ื datetime
ืืฉ ืืกืคืจ ืืืืงืืช ืืขืืืื ืขื ืืื ืื ืืคืืืชืื. ืืื ืฉืืขืืจื ืื ื ืืกืงืจืืคื ืื datetime, ืฉืืืืฆืืช ืืืืืงื ืชืืจืื ืืฉืขื, ื timedelta ืฉืืืืฆืืช ืืคืจืฉ ืืื ืฉื ื ืืืืืงืื datetime. ืืคืื ืงืฆืื
now ืฉื datetime ืืืืืจื ืืืืืงื ืฉืืชืืื ืืื ืฉืืฉ ืขืืฉืื. ืื ื ืืื ืืืืืืืช ืืฉืืืืฉ ืืืืืงืืช:
>>> from datetime import datetime, timedelta
>>> datetime.now()
datetime.datetime(2022, 5, 16, 21, 34, 23, 446115)
>>> datetime.now() + timedelta(days=1)
datetime.datetime(2022, 5, 17, 21, 35, 3, 13974)
>>> datetime.now() - timedelta(minutes=10)
datetime.datetime(2022, 5, 16, 21, 25, 18, 937076)
ืืคืฉืจ ืื ืืืฆืืจ ืืืืืงื datetime ืืชืืจืื ืืฉืขื ืกืคืฆืืคืืื, ืื ืืงืืช ืืืืืงื ืงืืื ืืืืืืืฃ ืืืง ืืืฉืืืช ืฉืื. ืืืืืื ืืงืื ืืื ืืืงื ืืืืืงื datetime ืฉื ืืืื ืืืืืืฃ ืจืง ืืช ืืฉืขื ืืืืงืืช ืืฉืขื ืืจืืข ืืืจ ืืฆืืจืืื:
>>> datetime.now().replace(hour=16, minute=0)
datetime.datetime(2022, 5, 16, 16, 0, 17, 369505)
## ืื ืชืื ืื
ืขืืฉืื ืฉืื ืื ื ืืืืขืื ืืขืืื ืขื datetime ื timedelta ืืืืข ืืืื ืืืกืืฃ ืงืฆืช ื ืชืื ืื. ืื ืืชื ืืืฉืืื ืืืฉืจื ืืคื ืื ืื ืืืืืจ ืืคืฉืจ ืคืฉืื ืืจืฉืื ืืงืืืฅ ืืช ืื ืฉืฉืืืขืื. ืืืช ืืจืฉืืื ืฉืื ื ืฉืืขืชื:
16:02 484
16:06 501
16:07 504
16:09 508
16:11 510
16:12 513
16:14 511
16:15 516
16:21 521
16:22 523
16:26 478
16:30 524
16:32 525
16:33 530
16:34 532
16:36 527
16:37 531
16:39 534
16:42 542
16:45 541
ืืขืืืื ืืจืืฉืื ื ืืืืฆืืช ืฉืขื ืืืขืืืื ืืฉื ืื ืืช ืืืกืคืจ ืฉื ืื ืฉืขืืฉืื ื ืื ืก. ืื ื ืืืืชื 547 ืืจืฆืืชื ืืืขืช ืืื ืืื ืขืื ื ืฉืืจ ืื ืืืืืช. ืืขืืฉืื ืืกืงืจืืคื.
## ืืื ืืืฉืืื
ืืฉืืื ืืืฉื ืืื ืืื ืืืชื ื ืขืื ื ืฉืืจ, ืืกืคืืง ืืืกืชืื ืขื ืืื ืฉืืจืืช ืืืจืื ืืช ืืงืืืฅ. ืื ืื ื ืื ืจืืฆืื ืืืกืชืื ืขื ืื ืืงืืืฅ ืื ืืืื ืืืืืช ืฉืืืฉืื ื ืชืงืข ืืคื ื ืืฆื ืฉืขื, ืื ืฉืืคื ื ืฉืขื ืืื ืคืืืช ืคืงืืืื ืืื ืฉืืฉ ืขืืฉืื. ืืืฉ ืื ืขืฉืจ ืฉืืจืืช ืืืจืื ืืช ืืชื ื ืชืืฆืื ืืืืืงืช. ืฉืืชื ืื ืื ืฉืื ืฉืื ืื ืชืืื ื ืื ืกืื ืืคื ืืกืืจ ืืื ืืชืขืืืชื ืืื ืืกืงืจืืคื ืื ืืกืืฃ ืืืืข ืชืืจื.
ืืฉืืื ืืืืฉืื ืืฆืจืชื ืจืฉืืื, ืฉืื ืชื ืืจืฉืืื ืืืื ืืืืืงื datetime ืฉื ืฉืขืช ืืื ืืกื ืืืกืคืจ ืฉืืืืฆื ืืช ืืืกืคืจ ืฉืื. ืชืืื ืืคืฉืจ ืืืื ืืก ืขืื ืฉืืจืืช ืืจืฉืืื ืืฉืืงืจืืืื ืขืื ืืกืคืจ, ืื ืืงืจืื ืงืืืฅ ืฉืืืจ ืื ืืฉืืจืืช ื ืืฆืืืช ืื ืืื ืืืฆืืจ ืืช ืืจืฉืืื ืืืคืก. ืื ืื ื ืื ืฆืจืืืื ืื ืงืืช ืคืจืืืื ืืฉื ืื ืื ืืืื ืืจืฉืืื ืขืืื ืขื ืืืื ืืืืืื ืืจืฆืื. ืืืช ืืคืื ืงืฆืื ืฉืืืคืืช ืืื:
def invite(when, who):
if len(sample) == SAMPLE_SIZE:
sample.pop()
sample.insert(0, (when, who))
ืืืจื ืฉืื ื ืืื ื ืืช ืื ืืจืฉืืื ืื ื ืจืืฆื ืืืืืง ืืื ืื ืฉืื ืืืืื ืืคื ืื ืืชืืจ. ืื ื ืืืืข ืฉืื ืฉืื ืื ืชืืื ื ืื ืกืื ืืคื ืืกืืจ ืื ืื ื ืคืฉืื ืืืคืฉ ืืืืืื ืื ืืืืืช ืื ืืืกืคืจ ืืืงืกืืืื ืืืืกืืจ ืืืชื ืืืืกืคืจ ืฉืื:
def people_before_me(my_number):
last_number = max(x[1] for x in sample)
return my_number - last_number
ืืืชืืจ ืืื ืืืื ืืืฆืื ืื ืืื ืืืืชื ื ืืืืืฆืข ืขืืืจ ืืืืืื ืฉืื ืืชื. ืืฉืืื ืื ืื ื ืืืฉื ืืช ืืืคืจืฉ ืืื ืื ืฉืชื ืฉืืจืืช ืืืืืื - ืืืคืจืฉ ืืืืข ืืชืืจ ืืืืืงื timedelta - ืืื ืืืฉื ืืช ืืืืฆืข ืืืคืจืฉืื:
def average_wait_time():
wait_times = []
prev = sample[0]
for i in sample[1:]:
wait_times.append(prev[0] - i[0])
prev = i
return sum(w.total_seconds() for w in wait_times) / len(wait_times)
ืืคืื ืงืฆืื total_seconds ืฉื timedelta ืืืืืจื ืืช ืืคืจืฉ ืืืื ืืืืื ืืฉื ืืืช. ืืกืืื ืื ื ืงืืจื ืืช ืงืืืฅ ืืงืื ืืืคืขื ื ืืืชื ืขื ืืคืื ืงืฆืืืช ืฉืืชืืชื:
with open('myturn.txt') as f:
for line in f:
try:
parse_line(line)
except Exception:
print(f"Skipped line: {line}")
print(f"Please wait {average_wait_time() * people_before_me(547)} Seconds")1 419
# ืื ืืืงื ืจืง ืืืฉ ืืงืืช
ืืฉ ืืฆืืื ืฉืื ืื ื ื ืชืงืขืื ืขื ืงืื ืืืืืขืื ืื ืฉืืืจ ืื ืคืฉืื ืื ืืฆืืืืื ืืจืืืช ืืช ืื. ืืชืืชื ืขื ืืืืื ืืืืช ืืคื ื ืืื ืืืื ืขื ื div-ืื ืฉืื ื ืกืืจื ืื ืืื ื HTML, ืืื ืื ืื ื ืื ืืืืจืื ืืช ืื ืืืฆืืื ืฉืฉืืื ื ืืขืฉืืช Save, ืฉืืขืื ื ืืืืืช ืฉื ืืฉืชื ื ืื ืฉืฉืืื ื ืืืขืืืจ ืืืื ืคืจืืืจ ืืคืื ืงืฆืื ืฉืืืจืื ืืืื ืืืกืชืืจ. ืืื ืืืื ืืฆืืื ืฉืืฉืืืฉืื ืชืจืื ืื ืื ืฉืืืจ ืื ื ืืื ืืืื "ืื ื ืืื ืืื ืื ืฉืืชื ืื" ืืืืฉืื ืืืื. ืืืื ืืชืงืืืช ืฉืืื ืืืฃ ืืขืืืจ ืืื ืืื ืฉืื.
ืืื ืืื ืจืง ืืืง ืงืื ืืืืฆืืื.
ืืืจื ืืื ืืฉืืืฉืื ืืืคืฉ ืชืฉืืื ืฉื ืืืฉ ืืงืืช ืืฉ ืคืขืจ ืืืข ืขืฆืื ืฉืืชืืื ืืืืืจืื, ืฉืืืื ืงืฉื ืืกืืืจ ืืืืฉ ืืงืืช. ืื ืืืฉืื ืืฉืื ืืืชื ืืื ืืชืงื ืืงืกื ืฉื ืืืืขืช ืงืืืื ืืืื, ืื ื ืืืื ืืขื ืืช
git commit --amend, ืืื ืื ืื ื ืืฆืืจื ืืืกืืืจ ืื ืื ืืืืจ ืืจืืืง, ืืืื ืื ืืืื ืืขืฉืืช ืืช ืื ืืืจื ืฉืขืฉืืช push, ืืขื ื Immutability ืฉื ืงืืืืืื ืืขืื ืืื ืกืืฃ ืคืจืืื ืขื ืืื ืืื ืขืืื. ืชืฉืืื ืฉื ืืืฉ ืืงืืช ืื ืชืขืืืจ ืืื.
ืื ืืืืืื ืืืจืช ื bash ืืคืขื, ืืฉืืื ืืืกืืืจ ืืืืฉืื ืืื ืืชืงื ืืช ืืกืงืจืืคื ืืื:
#!/bin/bash
count=0
ls | while IFS= read -r line;
do
(( count++ ))
done
echo $count
ืื ื ืืฆืืจื ืืืกืืืจ ืื ืื ืื subshell ืืื ืืืืื ืืื ืืืจืื ืฉืงืืจืื ืืชืื subshell ืืืืจืื ืฉืงืืจืื ืืกืงืจืืคื ืืืืื ืกืืื ืืืืข ืืคืฉืจ ืืืขืืืจ ืืื ืืฉื ืืื ืืืื - ืืืงืืฆืืจ ืชืฉืืื ืืืื ืชืืงื ืืฉื ืื ื ืืจืื ืืืชืจ ืืืืฉ ืืงืืช.
ืืืคืืฉ ืชืฉืืื ืฉื 5 ืืงืืช ืืื ืืกืืช ืืขืช. ืืืขื ืชืืื ืืฉืืชื ืชืงืืขืื ืขื "ืืฉืื ืงืื", ืขืืืฃ ืืืชืืืฅ ืืืฉืื ืื ืืืฉืื ืืืืื ืฉื ืืฆื ืืชืืชืื.1 419
trueืืืงืื ืื, ืืืจื ืืืงืืืืช ืืืื ืืืืืง ืื ืืืืืงื ืืกืืื ืืื ืืขืจื ืืื ืืคืื ืงืฆืื
Array.isArray ืฉืืืื ืืช ืืฉืคื ืื ืชืืืช ืืื ืืงืื:
> const x = { a: 10, length: 20 };
> Array.isArray(x)
false
## ืืจืืง 3 - ืืืืงื ืื ืฉืื ืืกืืื ืฉืืื ืืืืืืงื ืื ื Prototype ืฉืื
ืืื ืื ืื ืืืืืชืจ ืืฉืืืฉื ืืืืืจืื ืืื ืืืืืงื:
if (Object.prototype.hasOwnProperty(k)) {}
ืืคืื ืงืฆืื hasOwnProperty ื ืืขืื ืืืืืื ืืื ืืืคืืื ืื ืฉืื "ืืืืช" ืืืืืืงื ืฉืื, ืืืื ืืืคืืื ืื ืฉืืคืฉืจ ืืืืืข ืืืืื ืืืืืืืงื ืฉืื ืืื ืื ืืขืฆื ืืืืืจืื ืขื ืืืืืงื ืืืจ ืฉืืื ืืืขืื ื Prototype Chain. ืืืืืื ืืืืคืืื toString ืืืื ืขื ืื ืืืืืงื JavaScript:
> const x = { a: 10 }
> x.toString()
'[object Object]'
ืืื ืื ืืืื ื ืจืืฆืื ืืงืื ืืืชื ืืืืืจืฆืื ืฉื forEach ืื ืืื ืืืืืจ ื Object.prototype ืืื ืขื ืืืืืืงื ืฉืขืืื ืื ื ืจืฅ. ืืืจืืง ืืื ืขืืืื ืจืืืื ืื ืื ืืชื ืืืฆืขืื ืืืืืช for ... in ืขื ืืืืืงื, ืืื ืื ืฉืืืคื ืืืชื ืืืืืฉื ืื ืฉืืืขื ืืื ืกืืื ืืืืฆืืข ืืืืืืช ืืืื. ืืืืืื ืฉืืจืืืชื ืืชืืืืช ืืคืืกื:
for (const [k, v] of Object.entries(x)) {
handler(v, k);
}
ืืืืืืืืช ืืกื ื ืช ืืืืฆื ืืช ืื ืืืืคืืื ืื ืฉืืืืขื ืืืืืืงื ืืจื ื Prototype ืฉืื ืื ืืชื ืช ืชืืฆืื ืืื ืืชืืืืจ ืืืชืจ ื ืื. ื ืืื, ืื ืื ื ืืคืกืืืื ืืืืฆืืขืื ืืื ืงืฉื ืื ืืืืืื ืฉืืคืขืจ ืืืื ืืืจืืฉ ืืืืืืฉืื ืืคืืืงืฆืื ืืืืชืืช.1 419
# ืฉืืืฉื ืืจืืงืื ืฉื foreach ืฉืืืจ ืื ืืืื ืืขืฉืืช
ืืืืืื foreach ืขืืชื ืืืืชืจืืช ืื ืืืื ืืฉืฆืืืฆื ืืื ืืขื ืฉืืฆืืื ืืืฉืชืื ืขื ืืฉืืื ื npm ืฉืื ืื ืืืชื. ืื ืืกืชืืจ ืืชืืจ ืคืืืง ื ืืื ืืื ืขืฉื ืืจืื ืจืขืฉ, ืืืืืืจ ืืื ืฉืืื ืฆืจืื ืชืืืืจืช ืืื ืฉืืืจ ืื ืืขืกืง ืืื ืฉื ืืืืืืช npm. ืืื ืชืืื ืืืืื ืฉืืืืืื ืืืืืช ืืกื ืืื ืคืื ืงืฆืื ืืืช ืื ืืกืืืืช, ืืฉืืชื ืื ืฆื ืืช ืืืื ืืื ืืืืช ืืงืจืื ืืช ืืงืื ืืืืืื ืืื ื ืฉืืืฉื ืืจืืงืื ืฉืคืขื ืืื ืืงืืืืื ื JavaScript ืืื ืืืื ืืืจ ืื ืืืื ืืืฉืชืืฉ ืืื:
## ืงืืื ืื ืืงืื
ืืืจืช ืืืืืื ืืืืื ืืืคืฉืจ ืืืชืื ืชืื ืืจืืฅ ืืืืืื ืขื ืืืืืงื ืืื ืืืขืช ืื ืืื ืืขืจื ืื ืืืืืงื. ืื ืืื ืืขืจื ืืืืืื ืชืคืขืื ืคืื ืงืฆืืืช ืืืคืื ืืชืขืืืจ ืื ืื ืคืขื ืืื ืืงืก ืืขืจื, ืืื ืืื ืืืืืงื ืืืืืื ืชืคืขืื ืืช ืืคืื ืงืฆืื ืืชืขืืืจ ืื ืื ืคืขื ืืคืชื ืืขืจื. ื readme ืื ื ืืชื ืื ืืช ืืืืืื ืืืื:
var each = require('foreach');
each([1,2,3], function (value, key, array) {
// value === 1, 2, 3
// key === 0, 1, 2
// array === [1, 2, 3]
});
each({0:1,1:2,2:3}, function (value, key, object) {
// value === 1, 2, 3
// key === 0, 1, 2
// object === {0:1,1:2,2:3}
});
ืืืจืืช ืฉืื ื ืื ืืืฉ ืจืืื ืืช ืืขืจื ืืืืืช ืกืคืจืื, ืืจืื ืืืชืื ืกืคืจืืืช ืืืจืื ื npm ืื ืจืื ืืช ืืขืจื ืืืืชืจ ืืฉ 141 ืกืคืจืืืช ืฉืชืืืืืช ื foreach ืืืฉืจ ืืืืจืกื ืืงืืืืช (ืืคื ื ืคืจืฉืืืช ืืืฉืชืืืืช ืืืืืืคืช) ืืืืขื ืืืขื ื 6 ืืืืืื ืืืจืืืช ืกื ืืื ื 8 ืืฉื ืื ืืื ืคืืจืกืื. ืฆืจืื ืืืืื, ืืกืคืจืื ืื ื ืืืฉื ืืขื JavaScript ืืืืจื ื ืืื ืืืฉ ืืขื ืืืฉืชืืฉ ืื. ืืงืื ืืื ืขืืื ืืื ืืืคืืคื ืื ืื ืืชื ืืืืื ืืื ืืืขืจืืื ืืืืืืงืืื:
const x = [10, 20, 30, 40];
const y = { a: 10, b: 20, c: 30, d: 40 };
function handler(value, key) {
console.log(`value ${value}; key ${key}`);
}
for (const [k, v] of Object.entries(x)) {
handler(v, k);
}
console.log('---');
for (const [k, v] of Object.entries(y)) {
handler(v, k);
}
ืืื ืื ืื ื ืื ืคื ืืื ืืืคืืจ ืืขืืจ ืืื ืืื ืืืืื ืืื ื, ืืืื ืืื ืืืืื ืืืื ื ืจืื ืืืื ืืืฆืจืืช ื ืืื ืืืฆืื ืืงืื ืฉื foreach. ืื ืื ืืงืื ืืชืื ืืืืืจ ืฉืืื ืืืืืืื:
var hasOwn = Object.prototype.hasOwnProperty;
var toString = Object.prototype.toString;
module.exports = function forEach (obj, fn, ctx) {
if (toString.call(fn) !== '[object Function]') {
throw new TypeError('iterator must be a function');
}
var l = obj.length;
if (l === +l) {
for (var i = 0; i < l; i++) {
fn.call(ctx, obj[i], i, obj);
}
} else {
for (var k in obj) {
if (hasOwn.call(obj, k)) {
fn.call(ctx, obj[k], k, obj);
}
}
}
};
## ืืจืืง 1 - ืืืืงื ืื ืืืืืงื ืืื ืคืื ืงืฆืื
ืืืจืืง ืืจืืฉืื ืืคืื ืงืฆืื ืืื ืืืืืงื ืืื ืืคืจืืืจ ืืฉื ื ืืื ืคืื ืงืฆืื. ืื ืืฉืชืืฉืื ืืืืืง ืืื:
if (toString.call(fn) !== '[object Function]') {
throw new TypeError('iterator must be a function');
}
ืืฆื ืืื ืื ื ืืืื ืฉืกืคืจืืืช ืื ืกืืช ืืขืืืจ ืื ืืืืืืช ืฉืืืืืช, ืืื ืืฆื ืฉื ื ืืจืื ืืืงืจืื ืืืืงืืช ืืชืืืืืืช ืืื ืขืืืืืช ืืืขืืช ืื ืื ืืื ืืื ื ืืื ืืืชืจ ืืืืื. ืืืงืจื ืฉืื ื ืืืืืงื ืืคืฉืืื ืื ืืฉืื ืืื ืคืื ืงืฆืื ืืืชื ืฆืจืืื ืืืืืช:
if (typeof(fn) !== 'function') {}
ืื ืืืชืจ ืืื ืืืชืื ืืช ืืงืื ืืชืื try/catch ืืืืืืช TypeError. ืืกืืื ืืืืจื ื String ืืื ืืื ืื ืืชืคืืก ืคืื ืงืฆืืืช ืืขืจืืช ืืกืืืืืช ืืืืืจืื ืืช ืืงืืจื ืืืขืืืจ ืคืื ืงืฆืื ืฉืืื ืืืืืจ ืืื. ืืืขืื ืขื ืื ืืื ืฉืืืื ืืฉ ืืจืื ืคืื ืงืฆืืืช ืืืืชืืืช ืฉืืฉืชืืฉ ืืืืืจ ืืื ืฉืืืืืจื ืืงืกื ืืืจ ื toString ืฉืืื, ืืืืืื ืคืื ืงืฆืืืช ืืกืื ืืจืื ืืืช:
> async function h() { }
undefined
> Object.prototype.toString.call(h)
'[object AsyncFunction]'
## ืืจืืง 2 - ืืืืงื ืื ืืืืืงื ืืื ืืขืจื
ืืืืง ืืื ืฉื ืืงืื ืฆืจืื ืืืคืขืื ืืืืื ืืืจืช ืขื ืืืืืงื ืืืืืื ืืืจืช ืขื ืืขืจื. ืื ืืืืงืื ืื ืื ืงืืืื ืืืืฆืขืืช ืืืืคืืื length - ืื ืืฉ ืื length ืืชื ืืขืจื, ืืืขืืื ืืชื ืืืืืงื. ืืื ืื ืื ื ืืืจ ืื ืืืืืื ืืืฉืชืืฉ ื typeof ืื:
> typeof [1,2,3]
'object'
ืืื ืืฆื ืฉื ื ืืืืคืืื length ืืื ืื ืื ืจืขืืื ืืื. ืืชืืจ ืืชืืื ืื ื ืืืื ืืืืกืืฃ ืืช ืืืืคืืื length ืืื ืืืืืงื ืฉืื, ืืื ืืคืื ืงืฆืื each ืชืชืืืก ืืืื ืืืขืืช ืืื ืืืขืจื:
> const x = { a: 10, length: 20 };
> var l = x.length;
> l === +l
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
