uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 419
Obunachilar
-124 soatlar
Ma'lumot yo'q7 kunlar
-230 kunlar
Postlar arxiv
ToCode
1 419
ื‘ื ื•ืกืฃ ืœืคื•ื ืงืฆื™ื” advanceTimersByTime ืื ื™ ืจื•ืื” ืขื•ื“ ื“ื‘ืจ ื—ื“ืฉ: ื”ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” act, ืฉืขื•ื˜ืคืช ืืช advanceTimersByTime. ืคื•ื ืงืฆื™ื™ืช act ืฉื™ื™ื›ืช ืœ react-testing-library ื•ื”ื™ื ื ื•ืขื“ื” ืœืืคืฉืจ ืœ testing library ืœื–ื”ื•ืช ืฉื”ื™ื” ืฉื™ื ื•ื™ ื•ืœืจื ื“ืจ ืžื—ื“ืฉ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื”. ื‘ื“ืจืš ื›ืœืœ ื›ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขื ืฉืขื•ื ื™ื ืืžื™ืชื™ื™ื ื•ืขื find ื”ื“ื‘ืจ ื”ื–ื” ืงื•ืจื” ืื•ื˜ื•ืžื˜ื™ืช, ืื‘ืœ ื‘ืžืขื‘ืจ ืœืฉืขื•ืŸ ืžื–ื•ื™ืฃ ืื ื—ื ื• ืžืื‘ื“ื™ื ืืช ื”ืคื™ื ื•ืง ื•ืฆืจื™ื›ื™ื ืœื”ื’ื™ื“ ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช ืœ testing library ืฉืงื™ื“ื•ื ื”ืฉืขื•ืŸ ื’ื ื™ื’ืจื•ื ืœ render ืžื—ื“ืฉ. ืขื›ืฉื™ื• ื‘ืื•ืชื” ืงืœื•ืช ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืงื•ื“ ืฉื™ื“ืžื” ื”ืžืชื ื” ืฉืœ 10 ืฉื ื™ื•ืช ื•ื™ื•ื•ื“ื ืืช ื”ืขืจืš ืฉืœ ื”ืฉืขื•ืŸ:
test('after 10 seconds the value changes to 10', () => {
  render(<Timer />);
  act(() => {
    jest.advanceTimersByTime(10000);
  });

  expect(screen.getByText(/10/)).toBeInTheDocument();
});
ื•ื’ื ื”ื•ื ื™ืจื•ืฅ ื‘ืฆื•ืจื” ืžื™ื™ื“ื™ืช ื‘ื–ื›ื•ืช ื”ืฉืขื•ืŸ ื”ืžื–ื•ื™ืฃ. ## ื‘ื“ื™ืงืช ืขืฆื™ืจื” ื•ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ื”ืฉืขื•ืŸ ืขื›ืฉื™ื• ืฉืื ื™ ื™ื•ื“ืข ืœื”ื–ื™ื– ืืช ื”ื–ืžืŸ ืงื“ื™ืžื” ืืคืฉืจ ืœื ืกื•ืช ืœืขืฆื•ืจ ืืช ื”ืฉืขื•ืŸ ื•ืœืจืื•ืช ืฉื”ื•ื ื‘ืืžืช ืœื ืžืชืงื“ื ื›ืฉื”ืฉื ื™ื•ืช ืขื•ื‘ืจื•ืช. ื”ื ื” ื”ื‘ื“ื™ืงื” ื”ื‘ืื”:
test('clicking "stop" stops the timer', () => {
  render(<Timer />);
  const stopButton = screen.getByRole('button', { name: /stop/i });
  userEvent.click(stopButton);

  act(() => {
    jest.advanceTimersByTime(1000);
  });

  expect(screen.getByText(/0/)).toBeInTheDocument();
});
## ื‘ื“ื™ืงืช ืฉื™ื ื•ื™ ืงืฆื‘ ื”ืฉืขื•ืŸ ื‘ื“ื™ืงื” ืื—ืจื•ื ื” ืœืงื•ืžืคื•ื ื ื˜ื” ื”ื™ื ืฉื™ื ื•ื™ ืงืฆื‘ ื”ืฉืขื•ืŸ, ื•ื’ื ืื•ืชื” ืื ื™ ื›ื•ืชื‘ ื™ื—ืกื™ืช ื‘ืงืœื•ืช ืื—ืจื™ ื›ืœ ืžื” ืฉืจืื™ื ื•:
test('after changing the speed, the timer moves faster according to the new value', () => {
  render(<Timer />);
  const speed = screen.getByRole('spinbutton');
  userEvent.clear(speed);
  userEvent.type(speed, "500");

  act(() => {
    jest.advanceTimersByTime(1000);
  });

  expect(screen.getByText(/2/)).toBeInTheDocument();
});
ื”ืคืขื ื›ืฉืื ื™ ืžืชืงื“ื ื‘ืฉื ื™ื” ืื ื™ ืžืฆืคื” ืฉื”ืžืกืคืจ ื™ืขืœื” ืœ-2, ื•ื‘ืืžืช ื›ืš ืงื•ืจื”.

ToCode
1 419
# ื‘ื“ื™ืงื•ืช ืฉืขื•ื ื™ื ืขื react-testing-library ืกืคืจื™ื™ืช react-testing-library ืชื•ืžื›ืช ื‘ืฆื•ืจื” ืžืœืื” ื‘ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืขื•ืฉื•ืช ื“ื‘ืจื™ื ื‘ืจืงืข ื‘ืฆื•ืจื” ืืกื™ื ื›ืจื•ื ื™ืช ื•ื‘ื‘ื“ื™ืงื” ืฉืœื”ืŸ. ื‘ืคื•ืกื˜ ื–ื” ื ื“ื‘ืจ ืขืœ ืฉืขื•ื ื™ื ื•ื ืจืื” ืื™ืš ืœื‘ื“ื•ืง ืงื•ืžืคื•ื ื ื˜ื•ืช ืฉืžื•ืฉืคืขื•ืช ืžื–ืžืŸ. ## ื”ืงื•ืžืคื•ื ื ื˜ื” ืื ื™ ืžืชื—ื™ืœ ืขื ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ื‘ืื”:
import { useState, useEffect } from 'react';

export default function Timer() {
  const [ms, setMs] = useState(1000);
  const [ticks, setTicks] = useState(0);
  const [ticking, setTicking] = useState(true);

  useEffect(() => {
    let clock = null;
    if (ticking) {
      clock = setInterval(() => {
        setTicks(t => t + 1);
      }, ms);
    }

    return () => {
      clearInterval(clock);
    };
  }, [ticking, ms]);

  function start() {
    setTicking(true);
  }

  function stop() {
    setTicking(false);
  }

  return (
    <div>
      <p>Ticks: {ticks}</p>
      {ticking
        ? <button onClick={stop}>Stop</button>
        : <button onClick={start}>Start</button>
      }
      <input type="number" value={ms} onChange={(e) => setMs(e.currentTarget.value)} />
    </div>
  );
}
ื”ืงื•ืžืคื•ื ื ื˜ื” ืžื™ื™ืฆื’ืช ืฉืขื•ืŸ ืืกื™ื ื›ืจื•ื ื™. ื›ืฉื”ืงื•ืžืคื•ื ื ื˜ื” ื ื›ื ืกืช ืœืžืกืš ื”ืฉืขื•ืŸ ื‘ืžืฆื‘ "ื“ื•ืœืง" ื•ืื– ื›ืœ ืฉื ื™ื” ื”ืงื•ืžืคื•ื ื ื˜ื” ืžืฆื™ื’ื” ืžืกืคืจ ืขื•ืœื” (ืžืชื—ื™ืœ ื‘-0). ืืคืฉืจ ืœืœื—ื•ืฅ ืขืœ ื›ืคืชื•ืจ Stop ื›ื“ื™ ืœืขืฆื•ืจ ืืช ื”ืฉืขื•ืŸ ื•ืื– ืฉื•ื‘ ืขืœ ื›ืคืชื•ืจ Start ื›ื“ื™ ืœื”ืคืขื™ืœ ืื•ืชื• ืฉื•ื‘, ื•ืืคืฉืจ ืœืฉื ื•ืช ืืช ื”ืžื”ื™ืจื•ืช ื‘ืืžืฆืขื•ืช ืฉื™ื ื•ื™ ื”ื˜ืงืกื˜ ื‘ืชื™ื‘ื”. ## ื‘ื“ื™ืงืช ืžืฆื‘ ืจืืฉื•ื ื™ ื‘ื‘ื“ื™ืงื” ื”ืจืืฉื•ื ื” ืขืœ ื˜ื™ื™ืžืจ ื ืจืฆื” ืœื•ื•ื“ื ืฉื”ื•ื ืžื•ืคื™ืข ื‘ืžืฆื‘ ื”ืจืืฉื•ื ื™ ืฉื”ื’ื“ืจื ื•, ื›ืœื•ืžืจ ืขื ื”ืขืจืš 0, ืขื ืžื”ื™ืจื•ืช ืฉืœ ืฉื ื™ื” ื•ืขื ื”ื›ืคืชื•ืจ Stop:
test('initial values', () => {
  render(<Timer />);
  expect(screen.getByText(/0/)).toBeInTheDocument();
  expect(screen.getByRole('button', { name: /stop/i })).toBeInTheDocument();
  expect(screen.getByRole('spinbutton')).toHaveDisplayValue(1000);
});
## ื‘ื“ื™ืงืช ื”ืชืงื“ืžื•ืช ื”ืฉืขื•ืŸ ื•ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ืžืฉื™ืš ืœื‘ื“ื™ืงื” ื™ื•ืชืจ ืžืขื ื™ื™ื ืช - ื‘ื•ืื• ื ืจืื” ืฉืื—ืจื™ ืฉื ื™ื” ื”ืฉืขื•ืŸ ื‘ืืžืช ืžืชืงื“ื. ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืื—ืจื™ ืฉื”ืฉืขื•ืŸ ื™ืชืงื“ื ื”ื˜ืงืกื˜ ื™ืชืขื“ื›ืŸ ืœืžืกืคืจ 1, ื•ืœื›ืŸ ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘ ืืช ื”ื‘ื“ื™ืงื”:
test('after 1 second the value changes to 1', async () => {
  render(<Timer />);
  expect(await screen.findByText(/1/, {}, { timeout: 3000 })).toBeInTheDocument();
});
ืื ื™ ืžืฉืชืžืฉ ื‘ findByText ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ืืœืžื ื˜ ืขื ื”ื˜ืงืกื˜ 1. ื”ื—ื™ืคื•ืฉ ืขื find ืžื—ื›ื” ืขื“ ืฉื”ืืœืžื ื˜ ื™ื•ืคื™ืข, ื•ื‘ื’ืœืœ ื–ื” ืขืœื™ื ื• ืœื›ืชื•ื‘ ืœืคื ื™ื• await. ื‘ื’ืœืœ ืฉื™ืฉ await ื‘ืงื•ื“ ื”ื‘ื“ื™ืงื”, ืคื•ื ืงืฆื™ื™ืช ื”ื‘ื“ื™ืงื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืžืกื•ืžื ืช ื‘ืชื•ืจ async. ื”ืคืขืœื” ืฉืœ ื”ื‘ื“ื™ืงื” ืžื’ืœื” ืฉื”ื™ื ืขื•ื‘ื“ืช, ืื‘ืœ ืœืื˜. find ืžื—ื›ื” ืœืคืขืžื™ื ื’ื ืฉืชื™ ืฉื ื™ื•ืช ืขื“ ืฉื”ืขืจืš ื™ืชืขื“ื›ืŸ, ื›ื ืจืื” ื‘ื’ืœืœ ืฉืกืคืจื™ื™ืช ื”ื‘ื“ื™ืงื•ืช ืœื ืจื•ืื” ืืช ื”ืฉื™ื ื•ื™ ื‘ื“ื™ื•ืง ื›ืฉื”ื•ื ืงื•ืจื”. ืœื›ืŸ ื”ื”ืขื“ืคื” ืฉืœื ื• ื‘ื‘ื“ื™ืงืช ืงื•ื“ ืืกื™ื ื›ืจื•ื ื™ ื‘ืžื™ื“ืช ื”ืืคืฉืจ ื”ื™ื ืœื”ืคื•ืš ืืช ื”ืงื•ื“ ืœืกื™ื ื›ืจื•ื ื™ ืื• ืœืคื—ื•ืช ืœืžื™ื™ื“ื™. ื‘ืžืงืจื” ืฉืœ ืฉืขื•ื ื™ื ื”ื˜ืจื™ืง ื”ื•ื ืœื“ืจื•ืก ืืช ื”ืคื•ื ืงืฆื™ื•ืช setInterval ื• setTimeout ื•ืœื™ื™ืฆืจ "ืฉืขื•ืŸ" ืžื–ื•ื™ืฃ, ืฉืืคืฉืจ ืœื”ื–ื™ื– ืื•ืชื• ื‘ืฆื•ืจื” ืชื›ื ื•ืชื™ืช. ื’'ืกื˜ ืžืกืคืง ืœื™ ืืช ื”ื›ืœื™ื ืœื–ื” ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื”:
jest.useFakeTimers();
ืื ื™ ืžื•ืกื™ืฃ ืœืชื•ื›ื ื™ืช ื”ื‘ื“ื™ืงื” ืฉืœื™ ืืช ื”ืงื•ื“ ื”ื‘ื:
beforeEach(() => {
  jest.useFakeTimers();
});

afterEach(() => {
  jest.useRealTimers();
});
ื”ื‘ืœื•ืง beforeEach ืžื’ื“ื™ืจ ืงื•ื“ ืฉื™ืจื•ืฅ ืœืคื ื™ ื›ืœ ื‘ื“ื™ืงื”, ื•ื”ื‘ืœื•ืง afterEach ืžื’ื“ื™ืจ ืืช ื”ืงื•ื“ ืฉื™ืจื•ืฅ ืื—ืจื™ ื›ืœ ื‘ื“ื™ืงื” (ื™ืฉ ื’ื beforeAll ื• afterAll). ืื ื™ ืžืฉืชืžืฉ ื‘ืฉื ื™ ื”ื‘ืœื•ืงื™ื ื›ื“ื™ ืœื”ืคืขื™ืœ ืฉืขื•ื ื™ื ืžื–ื•ื™ืคื™ื ืœืคื ื™ ื›ืœ ื‘ื“ื™ืงื”, ื•ืœื”ื—ื–ื™ืจ ืืช ื”ืžืฆื‘ ืœืงื“ืžื•ืชื• ื‘ืกื•ืฃ ื”ื‘ื“ื™ืงื•ืช. ืขื›ืฉื™ื• ื‘ืงื•ื“ ื”ื‘ื“ื™ืงื•ืช ืื ื™ ื™ื›ื•ืœ ืœืงืจื•ื ืœ:
jest.advanceTimersByTime(1000);
ื›ื“ื™ ืœื–ื•ื– ืงื“ื™ืžื” ื‘ื–ืžืŸ. ืื ื™ ืžืขื“ื›ืŸ ืืช ืงื•ื“ ื”ื‘ื“ื™ืงื” ื›ื“ื™ ืœื”ื™ื ื•ืช ืžื”ืฉืขื•ืŸ ื”ืžื–ื•ื™ืฃ ื”ื—ื“ืฉ ืฉืœื™:
test('after 1 second the value changes to 1', () => {
  render(<Timer />);
  act(() => {
    jest.advanceTimersByTime(1000);
  });

  expect(screen.getByText(/1/)).toBeInTheDocument();
});

ToCode
1 419
# multipass ื”ื™ื ื”ื“ืจืš ื”ื›ื™ ืงืœื” ืœืงื‘ืœ ืžื›ื•ื ืช ืื•ื‘ื•ื ื˜ื• ื•ื™ืจื˜ื•ืืœื™ืช ืขืœ ื”ืžื—ืฉื‘ ืฉืœื›ื ืชื•ื›ื ื•ืช ื›ืžื• virtualbox ืื• vmware ื”ื•ืคื›ื•ืช ืืช ื”ื”ืชืงื ื” ืฉืœ ืžื›ื•ื ืช ืœื™ื ื•ืงืก ื•ื™ืจื˜ื•ืืœื™ืช ืœืžืื•ื“ ืคืฉื•ื˜ื”, ื•ื‘ื–ื›ื•ืชืŸ ืืคืฉืจ ืœื”ืชื ืกื•ืช ืขื ื”ืคืฆื•ืช ื—ื“ืฉื•ืช ื•ืœื”ื™ื ื•ืช ืžื”ืกื‘ื™ื‘ื” ื”ื’ืจืคื™ืช ื”ืฉื•ื ื” ื•ืžื”ืื•ื•ื™ืจื” ื”ืฉื•ื ื” ืฉืœ ื›ืœ ื”ืคืฆื”. ืื‘ืœ ืœืคืขืžื™ื ืื ื—ื ื• ืจืง ืจื•ืฆื™ื ืœื”ืจื™ืฅ ืžืฉื”ื• ื‘ืžืกื•ืฃ ืื• ืœื‘ื“ื•ืง ืžืฉื”ื• ื™ื•ืชืจ ืงื˜ืŸ, ืื• ืœื—ืœื•ืคื™ืŸ ืœื”ืจื™ืฅ ืžืกืคืจ ืžื›ื•ื ื•ืช ื‘ืœื™ GUI ืฉื™ืชืงืฉืจื• ื‘ื™ื ื™ื”ืŸ ื‘ืจืฉืช. ืœืžืฆื‘ื™ื ื”ืืœื” ืชื•ื›ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช "ื™ื•ืชืจ ืžื“ื™". ืชื•ื›ื ืช Multipass ืžืฆื™ืขื” ืคื™ืชืจื•ืŸ ื”ืจื‘ื” ื™ื•ืชืจ ืžื“ื•ื™ืง ื•ืืœื’ื ื˜ื™ ืœืžื™ ืฉืจื•ืฆื” ืœื”ืจื™ื ืžื›ื•ื ื•ืช ืื•ื‘ื•ื ื˜ื• ื•ื™ืจื˜ื•ืืœื™ื•ืช, ื ื˜ื•ืœื•ืช ืžืžืฉืง ื’ืจืคื™, ืขืœ ื”ืžื›ื•ื ื” ื”ืžืงื•ืžื™ืช. ## ื”ืžื›ื•ื ื” ื”ืจืืฉื•ื ื” ืฉืœื™ ืฉืœื‘ ืจืืฉื•ืŸ ื”ื•ื ืœื”ืชืงื™ืŸ ืืช multipass ืžื”ืืชืจ ืฉืœื”ื ื‘ื›ืชื•ื‘ืช: https://multipass.run/install ืคืฉื•ื˜ ื‘ื•ื—ืจื™ื ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœื›ื ื•ืขื•ื‘ื“ื™ื ืœืคื™ ื”ื”ื•ืจืื•ืช. ื™ืฉ ืชืžื™ื›ื” ืžืœืื” ื‘ Linux, Windows ื• Mac (ื›ื•ืœืœ ืžืขื‘ื“ ืืคืœ). ืื—ืจื™ ื”ื”ืชืงื ื” ื›ื•ืชื‘ื™ื ืžื”ืžืกื•ืฃ:
multipass shell
ื•ื™ืฉ ืœื›ื Shell ืœืชื•ืš ืžื›ื•ื ืช ืื•ื‘ื•ื ื˜ื• ื—ื“ืฉื” ื•ื ื˜ื•ืœืช ืžืžืฉืง ื’ืจืคื™. ## ืžื” ืขื•ื“ ื”ืžื›ื•ื ื” ื ื•ืฆืจื” ืขื ื“ื™ืกืง ืฉืœ 5 ื’'ื™ื’ื” ื•ื’'ื™ื’ื” ื–ื™ื›ืจื•ืŸ. ื”ื™ื ืžืจื™ืฆื” ืืช Ubuntu LTS ื”ืื—ืจื•ื ื” ื•ื”ื™ื ืžืชื—ื‘ืจืช ืœืื™ื ื˜ืจื ื˜ ื“ืจืš ื”ืžื›ื•ื ื” ื”ืžืืจื—ืช. ืืคืฉืจ ืœื”ื•ืกื™ืฃ ืขื•ื“ ืžื›ื•ื ื•ืช ืžื’ื™ืจืกืื•ืช ืื—ืจื•ืช ืฉืœ Ubuntu, ืื• ืขื ื’ื“ืœื™ื ืื—ืจื™ื ื‘ืืžืฆืขื•ืช ืคืงื•ื“ืช multipass launch, ืœืžืฉืœ ื‘ืฉื‘ื™ืœ ืœื”ืจื™ืฅ ืžื›ื•ื ื” ื—ื“ืฉื” ืฉืœ ืื•ื‘ื•ื ื˜ื• 18.04 ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘:
multipass launch 18.04 -n my-old-ubuntu
ื”ืคืจืžื˜ืจ -n ืงื‘ืข ืืช ืฉื ื”ืžื›ื•ื ื” ื•ืื—ืจื™ ื–ื” ื‘ืฉื‘ื™ืœ ืœื”ื™ื›ื ืก ืืœื™ื” ืื ื™ ืืฆื˜ืจืš ืœืฆื™ื™ืŸ ืืช ื”ืฉื:
multipass shell my-old-ubuntu
ื”ืคืงื•ื“ื” multipass find ืชืฆื™ื’ ืœื›ื ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืื™ืžื’'ื™ื ืฉืชื•ื›ืœื• ืœื”ืชืงื™ืŸ ื‘ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช, ื• multipass list ืชืฆื™ื’ ืืช ื›ืœ ื”ืžื›ื•ื ื•ืช ืฉืžื•ืชืงื ื•ืช ืืฆืœื›ื. ืžื•ืœื˜ื™ืคืืก ื’ื ืชื•ืžื›ืช ื‘ cloud-init ืฉื–ื” ืกืงืจื™ืคื˜ื™ื ืื™ืชื ืืคืฉืจ ืœืงื ืคื’ ืืช ื”ืžื›ื•ื ื”, ืœืงื‘ื•ืข ืื™ื–ื” ื—ื‘ื™ืœื•ืช ื™ื•ืชืงื ื• ืื•ื˜ื•ืžื˜ื™ืช, ืื™ื–ื” ืžืฉืชืžืฉื™ื ื™ื”ื™ื•, ืขืจื›ื™ื ืฉืœ ืงื‘ืฆื™ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื•ื›ืŸ ื”ืœืื”. ## ืื™ืคื” ืœื•ืžื“ื™ื ื™ื•ืชืจ ื‘ืชื™ืขื•ื“ ื›ืžื•ื‘ืŸ: https://multipass.run/docs. ื•ื’ื ืืคืฉืจ ืœื”ืคืขื™ืœ:
multipass help
ื•ืœืงื‘ืœ ืื™ื ืกื•ืฃ ืžื™ื“ืข ืžื•ืขื™ืœ ืขืœ ื”ืคืงื•ื“ื•ืช.

ToCode
1 419
# ื”ื™ื•ื ืœืžื“ืชื™: ื”ืคืงื•ื“ื” fc ืชืืคืฉืจ ืœื›ื ืœืขืจื•ืš ื”ื™ืกื˜ื•ืจื™ื” ื•ืœื”ืจื™ืฅ ืื•ืชื” ืฉื•ื‘ ื–ื” ืื•ืœื™ ืœื ืงื•ืจื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ืื‘ืœ ืœืคืขืžื™ื ื™ืฉ ืœื ื• ืคืงื•ื“ื” ืื• ื›ืžื” ืคืงื•ื“ื•ืช ืžื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืจื™ืฅ ืฉื•ื‘ ื•ืฉื•ื‘, ื•ื‘ื–ื” ื‘ื“ื™ื•ืง fc ื™ื›ื•ืœื” ืœืขื–ื•ืจ. ื‘ืฉื™ืžื•ืฉ ื”ืคืฉื•ื˜ ืฉืœื” ื”ืคืงื•ื“ื” ื™ื•ื“ืขืช ืœืžืฆื•ื ืคืงื•ื“ื•ืช ื™ืฉื ื•ืช ืฉื”ืจืฆืชื. ืœื›ืŸ ืื ืื ื™ ืžืคืขื™ืœ:
mkdir foo
touch foo/bar
cp /etc/passwd foo
ืื– ืื ื™ ื™ื›ื•ืœ ืื—ืจื™ ื–ื” ืœื›ืชื•ื‘:
fc -l mkdir cp
ื•ืœืงื‘ืœ ืืช ืจืฉื™ืžืช ื›ืœ ื”ืคืงื•ื“ื•ืช ืž mkdir ืขื“ cp ื›ื•ืœืœ:
544      mkdir foo
545      touch foo/bar
546      cp /etc/passwd foo
ืžื” ืฉื™ื•ืชืจ ืžื“ืœื™ืง ืงื•ืจื” ืื ืื ื™ ืžื•ื•ืชืจ ืขืœ ื” -l, ื•ืื– fc ืคื•ืชื— ืืช ื”ืจืฉื™ืžื” ื‘ืชื•ืš ืขื•ืจืš ื˜ืงืกื˜, ืžืืคืฉืจ ืœื™ ืœืฉื ื•ืช ืืช ื”ืคืงื•ื“ื•ืช ื•ื‘ืกื•ืฃ ืžืจื™ืฅ ืืช ื›ื•ืœืŸ. ื‘ื“ื•ื’ืžื” ืฉืœื ื• ืื ื™ ืžื•ื•ืชืจ ืขืœ ื” -l ื•ืžืงื‘ืœ ืืช ื›ืœ ื”ืจืฉื™ืžื” ื‘ืขื•ืจืš ื˜ืงืกื˜, ืžืฉื ื” ื›ืœ ืžื•ืคืข ืฉืœ foo ืœ bar ื•ืžืงื‘ืœ ืืช ื”ืงื•ื‘ืฅ:
mkdir bar
touch bar/bar
cp /etc/passwd bar
ืฉื•ืžืจ ื•ื™ื•ืฆื ื•ื›ืš ื™ืฆืจืชื™ ืืช ืชื™ืงื™ื™ืช bar ื‘ื“ื™ื•ืง ื›ืžื• ืฉื™ืฆืจืชื™ ืงื•ื“ื ืืช ืชื™ืงื™ื™ืช foo. ืฉื™ืžื• ืœื‘ ืจืง ืฉืืชื ื‘ื•ื“ืงื™ื ื˜ื•ื‘ ื˜ื•ื‘ ืžื” ืืชื ืžืจื™ืฆื™ื ื›ืฉืืชื ื‘ืชื•ืš ื”ืขื•ืจืš, ื›ื™ ืžืจื’ืข ืฉ fc ื™ืฆื ืœื“ืจืš ืื™ ืืคืฉืจ ืœืขืฆื•ืจ ืื•ืชื• ื•ื–ื” ืฉืคืงื•ื“ื” ืžืกื•ื™ืžืช ื”ื•ืคื™ืขื” ื‘ื”ื™ืกื˜ื•ืจื™ื” ืœื ื‘ื”ื›ืจื— ืื•ืžืจ ืฉืืชื ืจื•ืฆื™ื ืœื”ืจื™ืฅ ืื•ืชื” ืฉื•ื‘.

ToCode
1 419
# ืœืžื” ืžืขืจืš ืจื™ืง ืฉื•ื•ื” 0? ืœื ืชืžื™ื“ ืื ื—ื ื• ืžืกื›ื™ืžื™ื ืขื ื”ืฉื’ืขื•ื ื•ืช ืฉืœ ื’'ืื•ื•ื”ืกืงืจื™ืคื˜ ืื‘ืœ ื”ืจื‘ื” ืคืขืžื™ื ื›ืŸ ื™ืฉ ืื™ื–ื” ื”ื™ื’ื™ื•ืŸ ืคื ื™ืžื™ ืฉื™ื›ื•ืœ ืœืขื–ื•ืจ ืœื”ืกื‘ื™ืจ ืืช ื”ื˜ื™ืจื•ืฃ. ื•ืขื ื”ื”ืงื“ืžื” ื”ื–ืืช ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืžืขืจื›ื™ื. ## ืงื•ื“ื ื”ืขื•ื‘ื“ื•ืช: ื–ื” ืœืงื•ื— ืž node.js ื’ื™ืจืกื” 18, ื’ื ื“ืคื“ืคื ื™ื ืžืชื ื”ื’ื™ื ื›ื›ื”:
> Number([])
0
> Number([4])
4
> Number([2, 3, 4])
NaN
ื›ืŸ ื‘ื’'ืื•ื•ื”ืกืงืจื™ืคื˜ ื›ืฉืื ื™ ื”ื•ืคืš ืžืขืจืš ื‘ื’ื•ื“ืœ ืืคืก ืœืžืกืคืจ ืื ื™ ืžืงื‘ืœ ืืช ื”ืžืกืคืจ ืืคืก, ืžืขืจืš ืฉืœ ืžืกืคืจ ื™ื—ื™ื“ ื™ื™ืชืŸ ืœื™ ืืช ื”ืžืกืคืจ ื”ื–ื” ื•ืžืขืจืš ื‘ื’ื•ื“ืœ ื’ื“ื•ืœ ื™ื•ืชืจ ื™ื”ืคื•ืš ืœ NaN. ## ืื‘ืœ ืœืžื” ื–ื” ืงื•ืจื”? ื‘ืฉื‘ื™ืœ ืœื”ืคื•ืš ืื•ื‘ื™ืงื˜ื™ื ืœืคืจื™ืžื™ื˜ื™ื‘ื™ื™ื ื’'ืื•ื•ื”ืกืงืจื™ืคื˜ ืžืฉืชืžืฉ ื‘ืฉืœื•ืฉ ื˜ื›ื ื™ืงื•ืช (ืœืคื™ ื”ืกื“ืจ ื”ื–ื”): 1. ืงื•ื“ื ื›ืœ ื”ื•ื ื‘ื•ื“ืง ืื ืœืื•ื‘ื™ืงื˜ ืžื•ื’ื“ืจ ื”ืกื™ืžื‘ื•ืœ Symbol.toPrimitive, ืื ื›ืŸ ื™ืคืขื™ืœ ืื•ืชื•. 2. ืื ืื™ืŸ toPrimitive ืžื ืกื™ื ืœื”ืคืขื™ืœ ืืช valueOf. 3. ืื ื’ื ื–ื” ืœื ืขื–ืจ ืžืคืขื™ืœื™ื ืืช toString. ืœืžืขืจื›ื™ื ืื™ืŸ toPrimitive ื•ื” valueOf ืฉืœื”ื ืžื—ื–ื™ืจ ืืช ื”ืžืขืจืš ืขืฆืžื•, ืื– ื ืฉืืจื ื• ืจืง ืขื toString:
> [].toString()
''
> [4].toString()
'4'
> [2, 3, 4].toString()
'2,3,4'
ื”ืžื—ืจื•ื–ืช ื”ืจืืฉื•ื ื” ืจื™ืงื” ื•ืœื›ืŸ ื”ื•ืคื›ืช ืœืืคืก, ื”ืฉื ื™ื” ื”ื•ืคื›ืช ืœืžืกืคืจ 4 ื•ืืช ื”ืฉืœื™ืฉื™ืช ื›ื‘ืจ ืื™ ืืคืฉืจ ืœื”ืคื•ืš ืœืžืกืคืจ ื•ืœื›ืŸ ื”ื•ืคื›ืช ืœ NaN. ## ืจื’ืข ืชื–ื›ื™ืจ ืœื™ ืžื” ื–ื” Symbol.toPrimitive ืื•ืงื™ื™ ืื– ื”ื‘ื ื• ืœืžื” ืžืขืจื›ื™ื ืžืชื ื”ื’ื™ื ื›ื›ื” ืื‘ืœ ืžื” ื–ื” ื‘ืขืฆื Symbol.toPrimitive ื•ื”ืื ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”ื”ืชื ื”ื’ื•ืช? ืœื›ืœ ืื•ื‘ื™ืงื˜ ื‘ JavaScript ืื ื™ ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืžืคืชื— ืžื™ื•ื—ื“ ืฉื–ื” ื”ืกื™ืžื‘ื•ืœ toPrimitive ืฉื™ื”ื™ื” ืคื•ื ืงืฆื™ื”, ื•ื™ื—ื–ื™ืจ ืืช ื”ืื•ื‘ื™ืงื˜ ื‘ืฆื•ืจืช ื”ืคืจื™ืžื™ื˜ื™ื‘ ืฉืœื•. ื”ื ื” ื–ื” ื‘ื“ื•ื’ืžื”:
> const x = {
    [Symbol.toPrimitive](hint) { return 7 }
};
undefined

> Number(x)
7

ื”ืžืฉืชื ื” hint ืฉืขื•ื‘ืจ ืœืคื•ื ืงืฆื™ื” ืื•ืžืจ ืœื” ืžื” ืกื•ื’ ื”ืคืจื™ืžื™ื˜ื™ื‘ ืฉืื ื—ื ื• ืžืฆืคื™ื ืœืงื‘ืœ, ื•ื‘ื”ืžืจื” ืœืžืกืคืจ ื™ืฉ ืœื• ืืช ื”ืขืจืš number. ืืคืฉืจ ืœื”ื•ืกื™ืฃ ืืช ื”ืกื™ืžื‘ื•ืœ ื”ื–ื” ืœื›ืœ ืื•ื‘ื™ืงื˜ ืฉืจื•ืฆื™ื, ื›ื•ืœืœ ืœื›ืœ ื”ืžืขืจื›ื™ื. ืœื“ื•ื’ืžื”:
> Array.prototype[Symbol.toPrimitive] = () => 42;
[Function (anonymous)]

> Number([2, 3, 5])
42
ื•ืขื ื–ื” ืืคืฉืจ ืœืชืงืŸ ืืช ื”ื”ืžืจื” ืœืžืกืคืจ ื›ืš ืฉืชื”ื™ื” ืงืฆืช ืคื—ื•ืช ืžื•ื–ืจื” - ืœืžืฉืœ ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขื“ื›ืŸ ืืช ื”ืชื•ื›ื ื™ืช ื›ืš ืฉื›ืœ ื”ืžืจื” ืฉืœ ืžืขืจืš ืœืžืกืคืจ ืชื—ื–ื™ืจ ืืช ื’ื•ื“ืœ ื”ืžืขืจืš:
> Array.prototype[Symbol.toPrimitive] = 
function() {
    return this.length;
}

> Number([2, 3, 5])
3

ToCode
1 419
# ืœื ื”ื•ืœืš ืœื”ื™ื•ืช ื›ื™ืฃ ืื ื™ ื–ื•ื›ืจ ืฉื™ืฉื‘ืชื™ ืขื ื—ื‘ืจ ืฉืขื‘ื“ ื‘ืชื—ื•ื ืฉืœ Penetration Testing ื•ืืžืจืชื™ ืœื• - "ื•ื•ืื• ื™ืฉ ืœืš ืืช ื”ืขื‘ื•ื“ื” ื”ื›ื™ ื›ื™ืคื™ืช ื‘ืขื•ืœื, ื›ืœ ื”ื™ื•ื ืืชื” ืžื—ืคืฉ ื—ื•ืœืฉื•ืช ื‘ืžืขืจื›ื•ืช ื•ื™ื›ื•ืœ ืœืฉื‘ื•ืจ ื“ื‘ืจื™ื". "ืชืžืฉื™ืš ืœื—ืœื•ื" ื”ื•ื ืขื ื” ืœื™, "ื ื›ื•ืŸ, ื™ืฉ ืืช ื”ื—ืœืง ื”ื–ื” ืฉืฆืจื™ืš ืœืฉื‘ื•ืจ ื“ื‘ืจื™ื ื•ืœืžืฆื•ื ื—ื•ืœืฉื•ืช, ืื‘ืœ ืจื•ื‘ ื”ื™ื•ื ืื ื™ ืจืง ื›ื•ืชื‘ ื“ื•ื—ื•ืช ื•ืžืืจื’ืŸ ื™ืคื” ื•ืžืกื•ื“ืจ ืืช ื›ืœ ืžื” ืฉืžืฆืืชื™". ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืœืขืฉื•ืช ืžืฉื”ื• ื‘ืฉื‘ื™ืœ ื”ื›ื™ืฃ ื•ืœืขืฉื•ืช ืžืฉื”ื• ื‘ืฉื‘ื™ืœ ืขื‘ื•ื“ื” ืžืขื•ืœื ืœื ื ืจืื” ื‘ืจื•ืจ ื™ื•ืชืจ. ื•ืื•ืชื• ื”ื‘ื“ืœ ืชื•ืงืฃ ืื•ืชื ื• ื’ื ื›ืฉืื ื—ื ื• ื‘ืื™ื ืœืฉื“ืจื’ ืืช ื”ืงืจื™ื™ืจื” ืื• ื”ืงื•ื“ ืฉืœื ื•: 1. ื‘ื›ืชื™ื‘ืช ืคืจื•ื™ืงื˜ ืฆื“, ื”ื”ืชื—ืœื” ื ืจืื™ืช ืžืœื”ื™ื‘ื” (ืื™ื–ื” ื›ื™ืฃ ืื ื™ ื”ื•ืœืš ืœื”ืชืขืกืง ืขื ืžืœื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช), ืขื“ ืฉืืชื” ืžื’ืœื” ืฉื‘ืฉื‘ื™ืœ ืฉื“ื‘ืจื™ื ื™ืขื‘ื“ื• ื˜ื•ื‘ ื™ื—ื“ ืžืขื‘ืจ ืœ Tutorial ื”ื‘ืกื™ืกื™, ืฆืจื™ืš ืœื”ืชืืžืฅ, ืœื ืœื”ื‘ื™ืŸ ื•ืœืคืขืžื™ื ืคืฉื•ื˜ ืœื–ืจื•ืง ืขื•ื“ ืฉื•ืจื•ืช ืงื•ื“ ืขืœ ื”ื‘ืขื™ื”, ื‘ื“ื™ื•ืง ื›ืžื• ื‘ืขื‘ื•ื“ื” ื”ืืžื™ืชื™ืช. 2. ืœื™ืžื•ื“ ืชื—ื•ื ื—ื“ืฉ ืขืฉื•ื™ ืœื”ื™ืจืื•ืช ื›ืžื• ื”ื“ื‘ืจ ื”ื›ื™ ืžืœื”ื™ื‘ ื‘ืขื•ืœื, ืขื“ ืฉืืชื” ืžื’ืœื” ืฉื‘ืฉื ื” ื”ืจืืฉื•ื ื” ื”ื“ื‘ืจื™ื ื”ื™ื—ื™ื“ื™ื ืฉืชืฆืœื™ื— ืœื‘ื ื•ืช ื”ื ื”ืจื‘ื” ืคื—ื•ืช ืžืœื”ื™ื‘ื™ื ืžืืœื” ืฉื—ืœืžืช ืขืœื™ื”ื. ืฉืœืคื ื™ ืฉืชืฆืœื™ื— ืœื‘ื ื•ืช ืืช ื”ืžืฉื—ืง ืฉืชืžื™ื“ ื—ืœืžืช ืขืœื™ื• ืชืฆื˜ืจืš ืœื‘ื ื•ืช ืื™ื ืกื•ืฃ ืžืฉื—ืงื™ื ืคืฉื•ื˜ื™ื ื•ืžืฉืขืžืžื™ื ืจืง ื›ื“ื™ ืœืœืžื•ื“ ืืช ื”ื™ืกื•ื“ื•ืช. 3. ื”ื›ื ืกืช ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื” ืœืคืจื•ื™ืงื˜ ืขืฉื•ื™ื” ืœื”ื™ืจืื•ืช ื›ืžื• ืจืขื™ื•ืŸ ืžืžืฉ ืžืœื”ื™ื‘, ืขื“ ืฉืžืชื—ื™ืœื™ื ืชื›ืœ'ืก ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื•ืจื•ืื™ื ืฉื“ื‘ืจื™ื ืœื•ืงื—ื™ื ื™ื•ืชืจ ื–ืžืŸ ืžืžื” ืฉืงื™ื•ื•ื™ืช, ื•ืืคื™ืœื• ื”ืชืงื ื•ืช ื•ื”ื’ื“ืจื•ืช ืฉื ืจืื• ืžืžืฉ ืคืฉื•ื˜ื•ืช ื‘ Tutorial ื”ื•ืคื›ื•ืช ืœืืชื’ืจ ื›ืฉืฆืจื™ืš ืœืฉืœื‘ ืื•ืชืŸ ืขื ืคืจื•ื™ืงื˜ ืืžื™ืชื™. 4. ื”ืจื‘ื” ืžืชื›ื ืชื™ื ื—ื•ืœืžื™ื ืขืœ ืคืจื•ื™ืงื˜ Green Field, ืฉื‘ื• ื™ื•ื›ืœื• ืœื”ืชื—ื™ืœ ื”ื›ืœ ืžืืคืก, ืื• ืขืœ ืื™ื–ื” Rewrite ื’ื“ื•ืœ ืฉืื—ืจื™ื• ื›ืœ ื”ื‘ืขื™ื•ืช ื™ืขืœืžื•. ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื”ืกื™ื‘ื” ืฉืคืจื•ื™ืงื˜ Green Field ื”ื•ื ืคืฉื•ื˜ ื™ื•ืชืจ ื”ื™ื ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ืฉื”ืชื—ืœื ื• ืžืืคืก. ื›ื›ืœ ืฉืžื•ืกื™ืคื™ื ืคื™ืฆ'ืจื™ื ื”ืงื•ื“ ืžืกืชื‘ืš ื•ื”ื›ื™ืฃ ืฉื•ื‘ ื ืขืœื. ืื– ื ื›ื•ืŸ ืชื”ืœื™ืš ื”ืœื™ืžื•ื“, ืชื”ืœื™ืš ื”ืคื™ืชื•ื—, ืชื”ืœื™ืš ื”ืงื™ื“ื•ื“, ื”ื ืื•ืœื™ ืœื ืžืœื”ื™ื‘ื™ื ื›ืžื• ืฉื”ื™ื™ืชื ืจื•ืฆื™ื ืฉื™ื”ื™ื•. ืื‘ืœ ืืœ ืชืชื ื• ืœื‘ืœื‘ื•ืœ ื”ื–ื” ืœื™ื™ืืฉ ืืชื›ื - ืœืื•ืจืš ื–ืžืŸ, ืฉื™ืœื•ื‘ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื•ืœื™ืžื•ื“ ืชื—ื•ืžื™ื ื—ื“ืฉื™ื ื–ื• ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืงื“ื™ืžื”.

ToCode
1 419
# ืจื™ื™ืœื•ื•ื™ ืžืฆื™ืข ื“ืจืš ืงืœื” ื•ื—ื“ืฉื” ืœืคืชื— ื‘ืขื ืŸ ื’ื™ื•ื ืจืื•ืš ืž vercel ื”ื’ื“ื™ืจ ืืช ื•ืจืกืœ ืขืฆืžื” ื•ื”ืจื‘ื” ืžื”ืžืชื—ืจื•ืช ืฉืœื” ื‘ืชื•ืจ "ืขื ืŸ ืฉื›ื‘ื” 2", ืื ื‘ื—ื‘ืจื•ืช ื”ืขื ืŸ ื”ืžืกื•ืจืชื™ื•ืช ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฉื‘ื•ืจ ืืช ื”ืฉื™ื ื™ื™ื ื‘ืฉื‘ื™ืœ ืœื‘ื ื•ืช ืืคืœื™ืงืฆื™ื” - ื‘ื—ื‘ืจื•ืช ื”ืขื ืŸ ื”ื—ื“ืฉื•ืช ืื ื—ื ื• ื ืงื‘ืœ Deployments ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ, ื—ื™ื‘ื•ืจ ืœื’ื™ื˜ื”ืื‘ ื•ื’ื ืืคืฉืจื•ืช ืœื”ืจืฆื” ื•ื‘ื“ื™ืงื” ืžืงื•ืžื™ืช. ืจื™ื™ืœื•ื•ื™ ื”ื™ื ืื—ืช ืžื—ื‘ืจื•ืช ื”ืขื ืŸ ื”ื—ื“ืฉื•ืช ื”ืืœื” ื•ื”ื ื” ื›ืžื” ื“ื‘ืจื™ื ืฉื ืจืื” ืœื™ ืฉืชืื”ื‘ื• ื‘ื”: ## ื”ืชืงื ืช ื™ื™ืฉื•ื ื—ื“ืฉ ื‘ืฉืชื™ ืœื—ื™ืฆื•ืช ืจื™ื™ืœื•ื•ื™ ืžืฆื™ืขื” ืœื›ื ืกื‘ื™ื‘ืช ืคื™ืชื•ื— ืžืœืื” ื‘ืขื ืŸ ื•ื‘ืชืฉืœื•ื ืœืคื™ ืฉื™ืžื•ืฉ, ื›ืฉื™ื™ืฉื•ืžื™ื ืคืฉื•ื˜ื™ื ื™ืจื•ืฆื• ื‘ื—ื™ื ื (ืืชื ืžืงื‘ืœื™ื ืžืชื ื” 5$ ื‘ื—ื•ื“ืฉ), ื•ื›ื›ืœ ืฉืฆืจื™ื›ื™ื ื™ื•ืชืจ ื›ื— ืžื—ืฉื•ื‘ ื›ืš ืชืชื—ื™ืœื• ืœืฉืœื. ื”ืคื™ืฆ'ืจ ื”ืจืืฉื•ืŸ ืฉืื”ื‘ืชื™ ืฉื ื”ื™ื” ื”ืชืงื ืช ื™ื™ืฉื•ื ื—ื“ืฉ ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ ืžืชื•ืš ืื•ืกืฃ ืื™ื ืกื•ืคื™ ืฉืœ ืชื‘ื ื™ื•ืช ื™ื™ืฉื•ืžื™ื ืฉืœื”ื. ืืชื ื™ื›ื•ืœื™ื ืœื‘ื—ื•ืจ ื™ื™ืฉื•ื ืจื™ื™ืœืก, Node.JS Express, Django, Flask, ื›ืœ ื™ื™ืฉื•ืžื™ ื”ืคืจื•ื ื˜ ืื ื“ ื•ืืคื™ืœื• PHP ื• Rust. ืคืฉื•ื˜ ืœื•ื—ืฆื™ื "New Project", ื‘ื•ื—ืจื™ื ืืช ื”ืชื‘ื ื™ืช ื•ืจื™ื™ืœื•ื•ื™ ื›ื‘ืจ ื™ื™ืฆืจื• ืขื‘ื•ืจื›ื ืคืจื•ื™ืงื˜ ื—ื“ืฉ ื‘ื’ื™ื˜ื”ืื‘ ืฉืœื›ื ืœืคื™ ืื•ืชื” ืชื‘ื ื™ืช, ื•ื™ื—ื‘ืจื• ืื•ืชื• ืœืขื ืŸ ืฉืœื”ื ื›ืš ืฉื›ืœ ืงื•ืžื™ื˜ ืœื’ื™ื˜ื”ืื‘ ื’ื ื™ืขื“ื›ืŸ ืืช ื”ื’ื™ืจืกื” ื‘ืขื ืŸ. ืชื‘ื ื™ื•ืช ื”ืคืจื•ื™ืงื˜ื™ื ืžื•ืจื›ื‘ื•ืช ื›ืžื•ื‘ืŸ ืžืžื›ื•ื ื” ืฉืžืจื™ืฆื” ืืช ื”ืงื•ื“, ืื‘ืœ ืจื‘ื•ืช ืžื”ืŸ ืžื›ื™ืœื•ืช ื’ื ื‘ืกื™ืก ื ืชื•ื ื™ื ื‘ืžื›ื•ื ื” ื ืคืจื“ืช ื•ืื—ืจื™ ื™ืฆื™ืจืช ื”ืคืจื•ื™ืงื˜ ืืคืฉืจ ืœื”ื•ืกื™ืฃ (ืฉื•ื‘ ื“ืจืš ื”ืžืžืฉืง) ื’ื Load Balancer ื•ืฉืืจ ืคื™ื ื•ืงื™ื. ## ืœื•ื— ื‘ืงืจื” ืขื ืืคืฉืจื•ืช ืœื—ื–ื•ืจ ืื—ื•ืจื” ื‘ื ื•ืฉื ื” Deployment ื•ื‘ื“ื•ืžื” ืœ next ื•ื’ื ืœ render, ื’ื ืคื” ืืชื ื™ื›ื•ืœื™ื ืœืจืื•ืช ื›ืœ Deployment ืฉืขืฉื™ืชื ื‘ืœื•ื— ื”ื‘ืงืจื”, ืืคืฉืจ ืœื—ื–ื•ืจ ื’ื™ืจืกื” ืื—ื•ืจื” ืื ื’ื™ืจืกื” ืžืกื•ื™ืžืช ืœื ืขื‘ื“ื” ื˜ื•ื‘, ืืคืฉืจ ืœืจืื•ืช ืืช ื›ืœ ื”ืœื•ื’ื™ื ืฉืœ ื›ืœ ื”ืžื›ื•ื ื•ืช ื•ืœืฉื ื•ืช ื”ื’ื“ืจื•ืช ืฉืœ ืžื›ื•ื ื•ืช - ื›ื•ืœืœ ืœื”ืกืชื›ืœ ื‘ื ืชื•ื ื™ื ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื•ืœืขื“ื›ืŸ ืื•ืชื. ืจื™ื™ืœื•ื•ื™ ืชื•ืžื›ื™ื ื‘ืžืกืคืจ ืกื‘ื™ื‘ื•ืช ืœื›ืœ ืคืจื•ื™ืงื˜ ืื– ืืชื ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืกื‘ื™ื‘ืช ืคืจื•ื“ืงืฉืŸ ืœืžืฉืชืžืฉื™ื ื”ืืžื™ืชื™ื™ื ื•ืกื‘ื™ื‘ื•ืช ืคื™ืชื•ื— ืœื›ืœ ืžืชื›ื ืช ื‘ืฆื•ื•ืช, ื•ื”ื›ืœ ืฉื•ื‘ ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ. ## ืขื‘ื•ื“ื” ืžืงื•ืžื™ืช ื“ืจืš ื” CLI ืฉืœื”ื ืคื™ืฆ'ืจ ืื—ืจื•ืŸ ื•ืžื“ืœื™ืง ื”ื•ื ื”ื—ื™ื‘ื•ืจ ืœืžื—ืฉื‘ ื”ืžืงื•ืžื™ - ืื ื ื™ืงื— ืœื“ื•ื’ืžื” ืคืจื•ื™ืงื˜ ืฉืžื›ื™ืœ ื™ื™ืฉื•ื Node.JS Express ืฉืžืชื—ื‘ืจ ืœื‘ืกื™ืก ื ืชื•ื ื™ื, ืื– ื‘ืคื™ืชื•ื— ืžืงื•ืžื™ ืืชื ืœื ืจื•ืฆื™ื ืœื”ืชืงื™ืŸ ืืช ื›ืœ ื”ื›ืœื™ื ื•ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ื ืคืจื“, ืืœื ืืชื ืจื•ืฆื™ื ืœืขื‘ื•ื“ ืžืžืฉ ืขืœ ื”ืžื›ื•ื ื•ืช ืฉื‘ืขื ืŸ ื›ื“ื™ ืœืงื‘ืœ ืชืžื•ื ื” ื›ืžื” ืฉื™ื•ืชืจ ืžื“ื•ื™ืงืช ืฉืœ ืžื” ืฉืงื•ืจื”. ืจื™ื™ืœื•ื•ื™ ืžืืคืฉืจื™ื ืืช ื–ื” ืขื ืœืงื•ื— ื” CLI ืฉืœื”ื. ื”ืชืงื ืชื™ ืื•ืชื• ืขื:
npm i -g @railway/cli
ื•ืื—ืจื™ ื–ื” ืžืชื•ืš ืชื™ืงื™ื™ืช ื”ืคืจื•ื™ืงื˜ (ื›ืŸ ืฆืจื™ืš ืœืขืฉื•ืช clone ืœืคืจื•ื™ืงื˜ ื‘ื’ื™ื˜ื”ืื‘ ืฉื”ื•ื ื™ื•ืฆืจ ืœื›ื), ืื ื™ ืžืคืขื™ืœ railway link ื•ืื– railway run npm run dev. ืงืฆืช ืžืกื•ืจื‘ืœ ืื‘ืœ ื”ืชื•ืฆืื” ื”ื™ื ืฉื”ืืคืœื™ืงืฆื™ื” ืžืชื—ื‘ืจืช ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืขื ืŸ ืฉืœ ืจื™ื™ืœื•ื•ื™ ื•ื›ืœ ื”ืขื‘ื•ื“ื” ื‘ืคื™ืชื•ื— ื ืขืฉื™ืช ืžื•ืœ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืขื ืŸ ืฉื”ื•ืงื ื‘ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื—. ืกืš ื”ื›ืœ ืจื™ื™ืœื•ื•ื™ ืžืฆื™ืข ื—ื•ื•ื™ืช ืคื™ืชื•ื— ืžืื•ื“ ื ื•ื—ื” ื•ืงืœื” ืœืžื™ ืฉืจื•ืฆื” ืœืงื‘ืœ Deployment ืžื”ื™ืจ ืœื™ื™ืฉื•ืžื™ ื•ื•ื‘, ื•ื‘ืฉื™ืœื•ื‘ ืขื ืžืกืœื•ืœ ื—ื™ื ืžื™ ื–ืืช ื”ืฆืขื” ืฉืงืฉื” ืœืกืจื‘ ืœื”.

ToCode
1 419
# ืืจื‘ืข ืชืฉื•ื‘ื•ืช ืœื”ืชื ื’ื“ื•ื™ื•ืช ื ืคื•ืฆื•ืช ืœื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจื•ืฆื™ื ืœื”ื›ื ื™ืก ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืœืคืจื•ื™ืงื˜ ืื‘ืœ ื—ื‘ืจื™ ื”ืฆื•ื•ืช ืขื•ืฉื™ื ืคืจืฆื•ืฃ? ื”ื ื” ืืจื‘ืข ืชื’ื•ื‘ื•ืช ืฉืœืคืขืžื™ื ืื ื—ื ื• ืฉื•ืžืขื™ื ืขืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜, ื•ืžื” ืœืขื ื•ืช ื‘ื›ืœ ืžืฆื‘. ## ืื ื™ ื‘ื—ื™ื™ื ืœื ื˜ื•ืขื” ื‘ื˜ื™ืคื•ืกื™ื ืื ื™ ืžืชื—ื™ืœ ืขื ื”ืžืชื›ื ืช ื”ื’ืื•ืŸ ืฉืชืžื™ื“ ื›ืœ ื”ืงื•ื“ ืฉืœื• ืขื•ื‘ื“ ืžื”ืคืขื ื”ืจืืฉื•ื ื”, ื‘ื—ื™ื™ื ื”ื•ื ืœื ื˜ื•ืขื” ื‘ื˜ื™ืคื•ืกื™ื ื•ื™ื•ื“ืข ืืช ื›ืœ ื” API ืฉืœ ื›ืœ ื”ืงื•ื“ ื‘ืžืขืจื›ืช ื‘ืขืœ ืคื”. "ื‘ืฉื‘ื™ืœ ืžื” ืื ื™ ืฆืจื™ืš ื˜ื™ื™ืคืกืงืจื™ืคื˜?" ื”ื•ื ื™ืฉืืœ, "ื”ืžื•ื— ืฉืœื™ ืขื•ื‘ื“ ื™ื•ืชืจ ืžื”ืจ ืžื›ืœ ืžื—ืฉื‘". ื‘ืžืฆื‘ื™ื ื›ืืœื” ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื–ื›ื™ืจ ืœื—ื‘ืจ ืฉื”ื•ื ืœื ืขื•ื‘ื“ ืœื‘ื“, ื•ืฉืœืžืจื•ืช ืฉื”ื•ื ื”ืžืชื›ื ืช ื”ื›ื™-ื˜ื•ื‘-ื‘ืขื•ืœื ืฉืืฃ-ืคืขื-ืœื-ื˜ื•ืขื”-ื‘ื˜ื™ืคื•ืกื™ื ืœืคืขืžื™ื ืื ืฉื™ื ืื—ืจื™ื ื™ื›ื ื™ืกื• ืœืžืขืจื›ืช ืงื•ื“ ืžื‘ืœื‘ืœ, ื•ื‘ืคืจื•ื™ืงื˜ ื’ื“ื•ืœ ืื™ ืืคืฉืจ ืœืงืจื•ื ื•ืœื”ื›ื™ืจ ื›ืœ ืฉื•ืจืช ืงื•ื“ ืฉืžื™ืฉื”ื• ืžื›ื ื™ืก. ื›ืฉืฆืจื™ืš ืœืชืงืŸ ื‘ืื’ ื‘ืงื˜ืข ืงื•ื“ ืฉืœืจื•ื‘ ืืชื” ืœื ืขื•ื‘ื“ ืขืœื™ื•, ืžืื•ื“ ืขื•ื–ืจ ื›ืฉื™ืฉ ื›ืœื™ ืฉืงื•ืจื ืืชืš ืืช ื”ืงื•ื“ ื•ืžื•ื•ื“ื ืฉืœื ื”ืขื‘ืจืช ืคืจืžื˜ืจ ืžื”ื˜ื™ืคื•ืก ื”ืœื ื ื›ื•ืŸ. ื‘ื ื•ืกืฃ, ื‘ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช ื—ื“ืฉื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืืชื” ืขื“ื™ื™ืŸ ืœื ืžื›ื™ืจ ื‘ืขืœ ืคื” ืืช ื›ืœ ื”ืžืžืฉืง ืฉืœื”ืŸ. ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ื™ื›ื•ืœื” ืœื—ืกื•ืš ืžืขื‘ืจ ืœื—ืœื•ืŸ ื”ื“ืคื“ืคืŸ ื›ื“ื™ ืœื—ืคืฉ ื‘ืชื™ืขื•ื“ ื•ื‘ืกืš ื”ื›ืœ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืคื™ืชื•ื—. ื•ืืคื™ืœื• ืื ืืชื” ืžื›ื™ืจ ื›ืœ ืฉื•ืจืช ืงื•ื“ ื‘ืžืขืจื›ืช ื•ืืช ื” API ืฉืœ ื›ืœ ื”ืกืคืจื™ื•ืช ื”ื—ื™ืฆื•ื ื™ื•ืช, ื”ื™ื›ื•ืœืช ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ ืœืฉื ื•ืช ืฉื ืฉืœ ืžืฉืชื ื” ื‘ื›ืœ ื”ืคืจื•ื™ืงื˜ (ื‘ืžืงื•ื ืฉืชืฆื˜ืจืš ืœืขื‘ื•ืจ ืขืœ ื›ืœ ื”ืžืงื•ืžื•ืช ื‘ื”ื ื”ืžืฉืชื ื” ื”ื–ื” ืžื•ืคื™ืข) ืžื‘ื™ืื” ืœื–ื” ืฉื™ื”ื™ื” ื™ื•ืชืจ ืงืœ ืœืฉื ื•ืช ืฉืžื•ืช ื•ืœื‘ื—ื•ืจ ืืช ื”ืฉืžื•ืช ื”ื ื›ื•ื ื™ื ืœืคื•ื ืงืฆื™ื•ืช ื•ืœืžืฉืชื ื™ื ืฉืœื ื•. ## ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจืง ืžืื˜ ืืช ื”ื‘ื ื™ื” ื”ืชื ื’ื“ื•ืช ืžืกืคืจ 2 ืชื’ื™ืข ืžืื ืฉื™ื ืฉื“ื•ื•ืงื ื”ื™ื• ืฉืžื—ื™ื ืœื”ื›ื ื™ืก ืืช ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืœืคืจื•ื™ืงื˜ ืื‘ืœ ื™ืฉ ืœื”ื ื›ื‘ืจ ืžืกืคื™ืง ื ื™ืกื™ื•ืŸ ืขื ื•ื•ื‘ืคืืง ื›ื“ื™ ืœื“ืขืช ืฉื›ืœ ืคืœืื’ื™ืŸ ื—ื“ืฉ ื™ื›ื•ืœ ืœืฉื‘ื•ืจ ืืช ื›ืœ ื”ื‘ื™ืœื“ ืื• ืœื”ืื˜ ืื•ืชื• ืžืฉืžืขื•ืชื™ืช. ืื ื™ ืžืื•ื“ ื‘ืขื“ ืœื”ืงืฉื™ื‘ ืœื ื™ืกื™ื•ืŸ ืžืจ ืžื”ืขื‘ืจ, ืื‘ืœ ื ื“ืžื” ืœื™ ืฉื”ืžืกืงื ื” ื›ืืŸ ื”ื™ื ืฉื’ื•ื™ื”: ื”ื‘ืขื™ื” ื”ื™ื ืœื ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืืœื ื•ื•ื‘ืคืืง. ื›ืœื™ ื‘ื ื™ื” ื˜ื•ื‘ื™ื ื™ื•ืชืจ ื™ื’ื™ืขื• ืœืชื•ืฆืื•ืช ื˜ื•ื‘ื•ืช ื‘ื”ืจื‘ื”. ื‘ืžืงืจื™ื ืงื™ืฆื•ื ื™ื™ื ืืคืฉืจ ืœื‘ื—ื•ืจ ื›ืœื™ ื›ืžื• esbuild ืฉืคืฉื•ื˜ ืžื•ื—ืง ืืช ื›ืœ ื”ื’ื“ืจื•ืช ื”ื˜ื™ืคื•ืกื™ื ื‘ื‘ื ื™ื™ื” (ื‘ืœื™ ืœื‘ื“ื•ืง ืฉื•ื ื“ื‘ืจ) ื•ืœื”ืจื™ืฅ ืืช ื”ื‘ื“ื™ืงื” ืžืชื•ืš ื” IDE ื‘ื ืคืจื“ ืžื”ื‘ื ื™ื”. ## ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจืง ืžืื˜ ืืช ื”ืคื™ืชื•ื— ืื ืฉื™ื ืฉื—ื“ืฉื™ื ืœื˜ื™ื™ืคืกืงืจื™ืคื˜ ืฆืจื™ื›ื™ื ืœืขื‘ื•ืจ ืขืงื•ืžืช ืœืžื™ื“ื” ื•ืขื“ ืฉืขื•ื‘ืจื™ื ืื•ืชื” ืœืคืขืžื™ื ื™ืฉ ื”ืจื’ืฉื” ืฉื”ื›ืœื™ื ืขื•ื‘ื“ื™ื ื ื’ื“ืš - ืœื ื‘ืจื•ืจ ืื™ืš ืœืฉืœื‘ ืงื•ื“ ืžืกืคืจื™ื” ื—ื™ืฆื•ื ื™ืช ืฉืื™ืŸ ืœื” ื”ื’ื“ืจื•ืช ื˜ื™ืคื•ืกื™ื, ื”ื•ื“ืขื•ืช ื”ืฉื’ื™ืื” ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ืงืจื™ืคื˜ื™ื•ืช ื•ื”ืจื‘ื” ืคืขืžื™ื ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ืงื•ื“ ื ื›ื•ืŸ ืœื’ืžืจื™ ื•ื‘ื›ืœ ื–ืืช ืœื”ืชืœื•ื ืŸ ืขืœื™ื• ื•ืœื“ืจื•ืฉ ื”ื’ื“ืจื•ืช ื˜ื™ืคื•ืกื™ื ื™ื•ืชืจ ืžื“ื•ื™ืงื•ืช. ืงื™ื™ืžื•ืช ื‘ืขื™ื•ืช ืืžื™ืชื™ื•ืช ืขื ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื•ื›ืœ ืžื™ ืฉืขื‘ื“ื” ืื™ืชื• ืžืกืคื™ืง ื ืชืงืœื” ื‘ืžืงื•ืžื•ืช ืฉื‘ื”ื ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื”ื›ืจื™ื— ืื•ืชื ื• ืœื›ืชื•ื‘ ืงื•ื“ ืฉื‘ื™ื•ื ืจื’ื™ืœ ืœื ื”ื™ื™ืชื™ ื›ื•ืชื‘. ื•ื‘ื›ืœ ื–ืืช ื”ืžืงื•ืžื•ืช ื”ืืœื” ื”ื ื”ืžื™ืขื•ื˜ - ืจื•ื‘ ื”ื–ืžืŸ ื›ื›ืœ ืฉืžื›ื™ืจื™ื ื™ื•ืชืจ ืืช ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืื ื—ื ื• ืžื’ืœื™ื ืฉื”ื˜ืขื ื•ืช ืฉืœื• ื›ืŸ ืžื‘ื•ืกืกื•ืช ืขืœ ื‘ืขื™ื•ืช ืืžื™ืชื™ื•ืช ื‘ืงื•ื“ ื•ืชื™ืงื•ืŸ ืฉืœ ื”ืงื•ื“ ืžืฉืžื— ื’ื ืืช ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื•ื’ื ืžืขืœื” ืืช ื”ืจืžื” ืฉืœ ื”ืžืขืจื›ืช. ื ื›ื•ืŸ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืžื›ืจื™ื— ืื•ืชื ื• ืœื—ืฉื•ื‘ ื˜ื•ื‘ ืขืœ ื”ื’ื“ืจื•ืช ื”ื˜ื™ืคื•ืกื™ื ืฉืœื ื• ื•ืขืœ ื”ืžืžืฉืง ืฉืœ ื›ืœ ืคื•ื ืงืฆื™ื” ื•ื ื›ื•ืŸ ืฉื–ื” ื™ื›ื•ืœ ืœื”ืื˜ ืืช ื”ืคื™ืชื•ื— ื‘ื˜ื•ื•ื— ื”ืงืฆืจ, ืื‘ืœ ื‘ืžืขืจื›ื•ืช ืžืกืคื™ืง ื’ื“ื•ืœื•ืช ื”ืชื•ืขืœืช ืขื•ืœื” ื‘ื”ืจื‘ื” ืขืœ ื”ืžื—ื™ืจ. ## ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืœื ืจืœื•ื•ื ื˜ื™ ืœืคืจื•ื ื˜-ืื ื“ ื›ื™ ื” API ืฉืœื ื• ื’ืžื™ืฉ ืžื“ื™ ืžืชื›ื ืชื™ ืคืจื•ื ื˜ืื ื“ ืจื‘ื™ื ืจื’ื™ืœื™ื "ืœืฉื—ืง" ืขื ื”ืงื•ื“, ื• JavaScript ืชื•ืžืš ื‘ื’ื™ืฉื” ื”ื–ืืช ืืคื™ืœื• ื‘ื“ื•ื’ืžืื•ืช ืคืฉื•ื˜ื•ืช. ื”ืคื•ื ืงืฆื™ื” add ื‘ื“ื•ื’ืžื”:
function add(x, y) {
    return x + y;
}
ืขื•ื‘ื“ืช ืžื”ืงื•ืคืกื” ื’ื ืขืœ ืžืกืคืจื™ื, ื’ื ืขืœ ืžื—ืจื•ื–ื•ืช ื•ืขื•ืฉื” ืืช ื”ื“ื‘ืจ ื”ื ื›ื•ืŸ. ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ืื•ืชื” ื‘ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืื ื™ ื›ื‘ืจ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ื ืžืชื•ื—ื›ืžื™ื ื›ืžื• Generics ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ื‘ื“ื™ื•ืง ืืช ืื•ืชื• ืืคืงื˜:
function add<T extends number|string>(x: T, y: T) {
    return x + y;
}
ื–ื” ืžื•ื–ืจ ืœื? ื—ืฉื‘ืชื™ ืฉืื ื™ ืžื•ืกื™ืฃ ื”ื’ื“ืจื•ืช ื˜ื™ืคื•ืกื™ื ืงื˜ื ื•ืช ืœืžืขืจื›ืช ื•ืคืชืื•ื ืื ื™ ืฆืจื™ืš ืœืœืžื•ื“ ื”ืžื•ืŸ ืขืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืจืง ื‘ืฉื‘ื™ืœ ืœื™ื™ืฆื’ ื—ืชื™ืžื•ืช ื ืคื•ืฆื•ืช ื•ืคืฉื•ื˜ื•ืช. ืžื” ื™ืงืจื” ื›ืฉืื’ื™ืข ืœื—ืชื™ืžื•ืช ื”ืžืกื•ื‘ื›ื•ืช ื™ื•ืชืจ? ื•ื‘ืืžืช ืœื”ื•ืกื™ืฃ ื”ื’ื“ืจื•ืช ื˜ื™ืคื•ืกื™ื ื“ื•ืจืฉ ื”ื™ื›ืจื•ืช ื˜ื•ื‘ื” ื’ื ืขื JavaScript ื•ื’ื ืขื ื”ื›ืœื™ื ืฉืœ TypeScript. ื›ื›ืœ ืฉื”ืžืขืจื›ืช ืฉืœื ื• ืžืขื ื™ื™ื ืช ื™ื•ืชืจ (ื•ืžืขืจื›ื•ืช ื•ื•ื‘ ื”ืŸ ืชืžื™ื“ ื›ืืœื”), ื›ืš ื–ื” ื™ื”ื™ื” ื™ื•ืชืจ ืงืฉื” ืœืฉืœื‘ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื‘ืœื™ ืœื”ื›ื™ืจ ืื•ืชื”. ืื‘ืœ ืžืฆื“ ืฉื ื™ ื›ืŸ ืฆืจื™ืš ืœื–ื›ื•ืจ ืฉื‘ืžื™ืžื•ืฉ ื”ืžืงื•ืจื™ ืฉืœ add ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” ื’ื ืขืœ ื“ื‘ืจื™ื ืฉื”ื ืœื ืžืกืคืจื™ื ืื• ืžื—ืจื•ื–ื•ืช - ืœืžืฉืœ ืžื” ืœื“ืขืชื›ื ืชืงื‘ืœื• ืžื”ืคืขืœื” ื›ื–ื•:
add([1, 2, 3], [4, 5, 6]);
ืื ืืชื ืœื ื‘ื˜ื•ื—ื™ื ืื•ืœื™ ื–ื” ืกื™ืžืŸ ืฉืฉื•ื•ื” ืœื”ืฉืงื™ืข ื‘ืœื™ืžื•ื“ ื˜ื™ื™ืคืกืงืจื™ืคื˜.

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

ToCode
1 419
# ื”ืคืขืœืช ื’ื™ื˜ื”ืื‘ ืืงืฉืŸ ื›ืฉื ื•ืฆืจ ืชื’ ื—ื“ืฉ ืœืคื™ ืชื‘ื ื™ืช ื’ื™ื˜ื”ืื‘ ืืงืฉืŸ ืžืกืคืง ืžื ื’ื ื•ืŸ ืžืžืฉ ื ื•ื— ืœ Deployment ืื•ื˜ื•ืžื˜ื™ ืœืžืขืจื›ืช ืฉืœื›ื, ืื‘ืœ ื™ืฉ ื˜ื•ื•ื™ืกื˜: ืื ื—ื ื• ืœื ืจื•ืฆื™ื ืœืขืฉื•ืช deploy ืขืœ ื›ืœ PR ื—ื“ืฉ ืฉืžืžื•ื–ื’ ืœ main, ืื‘ืœ ืื ื—ื ื• ื’ื ืœื ืจื•ืฆื™ื ืœืขืฉื•ืช ืืช ื”ืงื•ืžื™ื˜ ื™ื“ื ื™ืช ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ ื›ื™ ื›ืŸ ืžืื•ื“ ื ื•ื— ืœืขื‘ื•ื“ ืจืง ื“ืจืš ื’ื™ื˜. ืคื™ืชืจื•ืŸ ืื—ื“ ืงืœ ื”ื•ื ืœื”ื—ืœื™ื˜ ืขืœ ืชื‘ื ื™ืช ืฉื ืฉืœ tag ืฉื™ื’ืจื•ื ืœ deploy, ืœืžืฉืœ ื ื—ืœื™ื˜ ืฉื›ืœ ืชื’ ืฉืžืชื—ื™ืœ ื‘ืžื™ืœื” deploy ื•ืื—ืจื™ื” ืžืงืฃ ื™ื’ืจื•ื ืœื’ื™ื˜ื”ืื‘ ืœื”ืคืขื™ืœ ืืงืฉืŸ ืฉื™ืขืฉื” deployment ื—ื“ืฉ. ื”ื˜ืจื™ื’ืจ ื‘ Github Action ื™ืจืื” ื›ืš:
on:
  push:
    tags:
      - 'deploy-*'
ื•ืื– ืืคืฉืจ ืœื™ืฆื•ืจ ืืช ื”ืชื’ ืขื ืชื•ืกืคืช ืฉืœ timestamp ื•ืœื“ื—ื•ืฃ ืื•ืชื• ืœืฉืจืช ืขื ื”ืคืงื•ื“ื•ืช:
$ git tag deploy-$(date +%s)
$ git push --tags

ToCode
1 419
# ืœื ืœื“ืื•ื’, ืื ื™ ืžื›ื™ืจ ืืช find ื ืชื•ืŸ ืื•ืกืฃ ืฉืœ ืชื™ืงื™ื•ืช ื‘ื›ืœ ืื—ืช ื™ืฉ ืคืจื•ื™ืงื˜ ืื—ืจ. ื”ืžืฉื™ืžื” ืฉืœื ื• ื”ื™ื•ื ื”ื™ื ืœื™ืฆื•ืจ ื‘ืชื•ืš ื›ืœ ืชื™ืงื™ื” ืชืช-ืชื™ืงื™ื” ื‘ืฉื app ืื ืื™ืŸ ื›ื–ืืช, ื•ืื ื”ืฆืœื—ื ื• ืœื™ืฆื•ืจ ืื– ื’ื ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืงื‘ืฆื™ื ื•ื”ืชื™ืงื™ื•ืช ืฉื”ื™ื• ื‘ืชื•ืš ืื•ืชื” ืชื™ืงื™ื” ืœืชื•ืš app. ืื ื”ื™ืชื” app ืงื•ื“ื ืืคืฉืจ ืœื“ืœื’ ืขืœ ื”ืชื™ืงื™ื”. ื›ืœ ืขื•ื“ ืžื“ื•ื‘ืจ ื‘ 2-3 ืคืจื•ื™ืงื˜ื™ื ืื™ืŸ ื‘ืขื™ื” ืœืขื‘ื•ืจ ืื—ื“ ืื—ื“, ืื‘ืœ ื›ืฉื™ืฉ ืขืฉืจื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ื›ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ find. ื”ืžืฉื™ืžื” ื”ืจืืฉื•ื ื” ื”ื™ื ืœืžืฆื•ื ืืช ื›ืœ ืชื™ืงื™ื•ืช ื”ืคืจื•ื™ืงื˜ื™ื, ื›ืœื•ืžืจ ื”ืชื™ืงื™ื•ืช ื‘ืจืžื” "ื”ืจืืฉื™ืช". ื‘ืฉื‘ื™ืœ ื–ื” find ืžืฆื™ืข ืœื ื• ืืช maxdepth, type ื• mindepth. ืขื‘ื•ืจ ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืฉืžื›ื™ืœื” ืฉืœื•ืฉ ืชื™ืงื™ื•ืช ืคืจื•ื™ืงื˜ื™ื ื‘ืฉืžื•ืช a, b ื• c ืื ื™ ืžืจื™ืฅ:
$ find . -mindepth 1 -maxdepth 1 -type d

./a
./c
./b
ื‘ื–ื›ื•ืช ืžืกื ืŸ ื” type ื”ืคืงื•ื“ื” ืžื“ืคื™ืกื” ืจืง ืืช ื”ืชื™ืงื™ื•ืช ื’ื ืื ื”ื™ื• ืงื‘ืฆื™ื ื‘ืชื™ืงื™ื” ื”ืจืืฉื™ืช. ืืคืฉืจ ืœืกื ืŸ ืขื•ื“ ื™ื•ืชืจ ื’ื ืœืคื™ ืฉืžื•ืช ืงื‘ืฆื™ื ืฉืœ ืื•ืชืŸ ืชื™ืงื™ื•ืช ืคืจื•ื™ืงื˜ื™ื ืขื ืชื•ืกืคืช ืžืชื’ -name. ืื—ืจื™ ืฉื™ืฉ ืœื ื• ืืช ืชื™ืงื™ื•ืช ื”ืคืจื•ื™ืงื˜ื™ื ืฆืจื™ืš ื‘ื›ืœ ืชื™ืงื™ื” ืœื”ืจื™ืฅ ืืช ื”ืคืงื•ื“ื•ืช:
mkdir app && mv * app
ืฉื™ืžื• ืœื‘ ืœืกื™ืžืŸ ื” && ื‘ื™ืŸ ืฉืชื™ ื”ืคืงื•ื“ื•ืช: ืื ื™ ืจื•ืฆื” ืœื”ืจื™ืฅ ืืช ื” mv ืจืง ืื ื”ืฆืœื—ืชื™ ืœื™ืฆื•ืจ ืืช ื”ืชื™ืงื™ื”. ืื mkdir ื ื›ืฉืœ ื–ื” ื›ื ืจืื” ืื•ืžืจ ืฉ app ื”ื™ืชื” ืฉื ืงื•ื“ื (ืœืžืจื•ืช ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืžื“ื•ื‘ืจ ื‘ื‘ืขื™ื™ืช ื”ืจืฉืื•ืช, ืื‘ืœ ื’ื ื‘ืžืงืจื” ื›ื–ื” ืื™ืŸ ื˜ืขื ืœื ืกื•ืช ืœื”ืขื‘ื™ืจ ืœืฉื ืงื‘ืฆื™ื). ื‘ืฉื‘ื™ืœ ื–ื” ืœ find ื™ืฉ ื›ืคืชื•ืจ exec. ืื‘ืœ ืื ื™ ืœื ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื™ืฉื™ืจื•ืช ืืช ื” && ื‘ืชื•ืš ื” exec ื•ืœื›ืŸ ืื ื™ ืžืจื™ืฅ ืขื•ืชืง ื—ื“ืฉ ืฉืœ bash ืฉื™ืคืขื™ืœ ืืช ืฉืชื™ ื”ืคืงื•ื“ื•ืช:
find . -mindepth 1 -maxdepth 1 -type d -exec bash -c "mkdir {}/app && mv {}/* {}/app" \;
ื•ืคื” ื‘ื“ื™ื•ืง ื”ื›ื— ื•ื”ื™ื•ืคื™ ืฉืœ ื”ื›ืœื™ื ื”ืงื˜ื ื™ื ืฉืœ ื™ื•ื ื™ืงืก - ื”ื™ื›ืจื•ืช ื˜ื•ื‘ื” ืื™ืชื ืขื•ื–ืจืช ืœืชืงืฉืจ ืขื ื”ืžื—ืฉื‘ ื˜ื•ื‘ ื™ื•ืชืจ ื•ืœื—ืกื•ืš ื–ืžืŸ ื‘ืžืฉื™ืžื•ืช ืฉื‘ืืžืช ืœื ื”ื’ื™ื•ื ื™ ืœืขืฉื•ืช ืื•ืชืŸ ื™ื“ื ื™ืช.

ToCode - Telegram kanali @tocodeil statistikasi va tahlili