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
# ื˜ื™ืค ื˜ื™ื™ืคืกืงืจื™ืคื˜: ื—ืชื™ืžื” ืฉืœ ืคื•ื ืงืฆื™ื” ืžืชื•ืš Literal Types ืžื ื’ื ื•ืŸ ื” Literal Types ื•ืื•ื‘ื™ืงื˜ื™ื ื‘ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื”ื•ื ื—ืžื•ื“ ื‘ืžื™ื•ื—ื“ ื›ืฉื›ื•ืชื‘ื™ื ื‘ืกืคืจื™ื” ื›ืžื• ืจื™ื“ืืงืก, ื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืืคืฉืจ ืœื”ื’ื“ื™ืจ ืžื’ื‘ืœื•ืช ืขืœ ืื•ื‘ื™ืงื˜ื™ื ืฉืคื•ื ืงืฆื™ื” ื™ื›ื•ืœื” ืœืงื‘ืœ. ื“ื•ื’ืžื” ืงืœืืกื™ืช ืชื”ื™ื” ื”ื’ื“ืจืช ื›ืžื” ืกื•ื’ื™ื ืฉืœ ืื™ืจื•ืขื™ื ื•ืคื•ื ืงืฆื™ื” ืฉื™ื•ื“ืขืช ืœืงื‘ืœ ืื•ื‘ื™ืงื˜ "ืื™ืจื•ืข" ืฉืžืชืื™ื ืœืื—ื“ ืžื”ื. ื”ืงื•ื“ ื™ืจืื” ื‘ืขืจืš ื›ืš:
type Event =
  | { type: 'login', payload: { username: string }}
  | { type: 'logout'}
  | { type: 'sendMessage', payload: { to: string, text: string }};

function handle(event: Event) {}
ื•ืขื›ืฉื™ื• ืฉื•ืจื” ื›ื–ืืช ืชืชืงืžืคืœ:
handle({ type: 'login', payload: { username: 'yay' }});
ืื‘ืœ ืฉื•ืจื” ื›ื–ืืช ืœื ืชืชืงืžืคืœ:
handle({ type: 'login', payload: { to: 'yay', text: 'abc' }});
ื›ื™ ืื•ื‘ื™ืงื˜ payload ืœื ืžืชืื™ื ืœืžื” ืฉื”ืคื•ื ืงืฆื™ื” ืžืฆืคื” ืžืื™ืจื•ืข ืœื•ื’ื™ืŸ. ืžืกืชื‘ืจ ืฉืืคืฉืจ ืœื”ืจื—ื™ื‘ ืืช ื”ืžื ื’ื ื•ืŸ ื•ืœื”ืฉืชืžืฉ ื‘ื• ื’ื ืœื‘ื ื™ื™ืช ืคื•ื ืงืฆื™ื” ื’ื ืจื™ืช - ื›ืœื•ืžืจ ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉืชืงื‘ืœ ื‘ืชื•ืจ ืคืจืžื˜ืจ ืจืืฉื•ืŸ ืืช ื” type ืฉืœ ื”ืื™ืจื•ืข ื•ืคืจืžื˜ืจ ืฉื ื™ ืืช ื” payload, ื•ืชื‘ื“ื•ืง ืฉื”ื›ืœ ืžืชืื™ื. ื‘ื•ืื• ื ื ืกื” ืืช ื–ื”. ื ื™ืกื™ื•ืŸ ืจืืฉื•ืŸ ืขืฉื•ื™ ืœื”ื™ืจืื•ืช ื›ืš:
type Event =
  | { type: 'login', payload: { username: string }}
  | { type: 'logout'}
  | { type: 'sendMessage', payload: { to: string, text: string }};

function handle(eventType: Event["type"], eventPayload: Event["payload"]) {}
ืื‘ืœ ื–ื” ืœื ืžืชืงืžืคืœ ื›ื™ ืœื ืœื›ืœ ื”ืื™ืจื•ืขื™ื ื™ืฉ payload. ืื ืื ื™ ืžื•ืกื™ืฃ payload ื’ื ืœืื™ืจื•ืข ื”ื ื™ืชื•ืง ืื ื™ ืžืฆืœื™ื— ืœืงืžืคืœ ืืช ื”ืงื•ื“:
type Event =
  | { type: 'login', payload: { username: string }}
  | { type: 'logout', payload: undefined }
  | { type: 'sendMessage', payload: { to: string, text: string }};

function handle(eventType: Event["type"], eventPayload?: Event["payload"]) {}
ืื‘ืœ ืื ื™ ืœื ืžืงื‘ืœ ืืช ืžื” ืฉืจืฆื™ืชื™ - ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ืงืžืคืœ ืืช ื”ืฉื•ืจื” ื”ื–ืืช ืœืžืจื•ืช ืฉื‘ืื™ืจื•ืข login ื›ืŸ ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ืฉื ืžืฉืชืžืฉ:
handle("login");
ื‘ืขืฆื ืžื” ืฉื”ืงื•ื“ ืฉืœื™ ืขืฉื” ื–ื” ืœื™ืฆื•ืจ ืคื•ื ืงืฆื™ื” ืฉืžืงื‘ืœืช ื‘ืชื•ืจ ืคืจืžื˜ืจ ืจืืฉื•ืŸ ืžืฉื”ื• ืฉืžื•ืคื™ืข ื‘ type ืฉืœ Event, ื•ื‘ืชื•ืจ ืคืจืžื˜ืจ ืฉื ื™ ืžืฉื”ื• ืฉืžื•ืคื™ืข ื‘ payload, ื‘ืœื™ ืœื”ืชืื™ื ื‘ื™ื ื™ื”ื. ื‘ืฉื‘ื™ืœ ื”ื”ืชืืžื” ื‘ื™ืŸ ืฉื ื™ ื”ืคืจืžื˜ืจื™ื ืื ื™ ืจืง ืฆืจื™ืš ืœื”ืคื•ืš ืืช ื”ืคื•ื ืงืฆื™ื” ืœ Generic. ื–ื” ื™ื™ืชืŸ ืœื™ ื’ื™ืฉื” ืœื˜ื™ืคื•ืกื™ื ืฉื‘ืืžืช ืขื‘ืจ ืœืชื•ืš Event["type"] ื•ืื– ื‘ืขื–ืจืชื• ืื ื™ ื™ื›ื•ืœ ืœืฆืžืฆื ืืช ื”ืื™ื—ื•ื“:
type Event =
  | { type: 'login', payload: { username: string }}
  | { type: 'logout', payload: undefined }
  | { type: 'sendMessage', payload: { to: string, text: string }};

function handle<E extends Event, EventType extends E["type"]>(
  eventType: EventType,
  eventPayload: Extract<Event, { type: EventType }>["payload"]
) {}

handle("login", { username: "ynon" });
handle("logout", undefined);
handle("sendMessage", { to: "ynon", text: "hi ;)"});
ืขื›ืฉื™ื• ืฉืœื•ืฉืช ื”ืงืจื™ืื•ืช ืžืชืงืžืคืœื•ืช, ืื‘ืœ ืงืจื™ืื•ืช ืฉืœื ืžืชืื™ืžื•ืช ืœื—ืชื™ืžื” ืœื ื™ืชืงืžืคืœื•. ืœืžืฉืœ ื–ื” ืœื ื™ืขื‘ื•ืจ:
handle("login", { to: "me", text: "bye" });
ื”ืžืฆื‘ ื˜ื•ื‘ ื•ืื ื—ื ื• ื›ืžืขื˜ ื‘ืกื™ื•ื ืื‘ืœ ืขื“ื™ื™ืŸ ื™ืฉ ื“ื‘ืจ ืื—ื“ ืฉืœื ื™ื•ืฉื‘ ื˜ื•ื‘ ื‘ืงื•ื“ ืฉื›ืชื‘ื ื• - ื•ื”ื•ื ื”ืฆื•ืจืš ืœื›ืชื•ื‘ undefined ื‘ืชื•ืš ื”ืงืจื™ืื” ืขื logout. ื‘ืฉื‘ื™ืœ ืžื” ื–ื” ื˜ื•ื‘? ืœืžื” ืื ื™ ืฆืจื™ืš ืœืขื‘ื•ื“ ื›ืœ ืคืขื ืฉืžืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” ืจืง ื‘ืฉื‘ื™ืœ ืฉื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ื”ื™ื” ืฉืžื—? ืขื ืขื•ื“ ืงืฆืช ืžืืžืฅ ืืคืฉืจ ืœื”ื™ืคื˜ืจ ื’ื ืžื–ื” ื•ืœืชืงืŸ ืืช ื”ืคื•ื ืงืฆื™ื” ื›ืš ืฉื”ืคืจืžื˜ืจ ื”ืฉื ื™ ื™ื”ื™ื” ืื•ืคืฆื™ื•ื ืืœื™ ืื ืœื ืžื•ื’ื“ืจ ืขื‘ื•ืจื• ืขืจืš ื‘ื˜ื™ืคื•ืก Event. ืžื” ืฉื”ื™ื™ืชื™ ืจื•ืฆื” ืœื›ืชื•ื‘ ื–ื”:
function handle<E extends Event, EventType extends E["type"]>(
  eventType: EventType,
  eventPayload: Extract<Event, { type: EventType }>["payload"] extends undefined
    ? "MAKE EVENT PAYLOAD OPTIONAL"
    : "USE THE VALUE FROM EXTRACT ..."
) {}
ื•ื’ื ื–ื” ืืคืฉืจื™ ื‘ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืขื ืงืฆืช ื•ื•ื“ื•, ื”ืคืขื ืื ื™ ืžืฉืชืžืฉ ื‘ืกื™ืžืŸ ืฉืœื•ืฉ ื ืงื•ื“ื•ืช ืžืฉืžืืœ ืœืžืคืชื—, ื•ืžืฉืชืžืฉ ื‘ืขืจืš ืฉื”ื•ื ืžืขืจืš ืฉืœ ืื™ื‘ืจ ืื—ื“, ื•ืื– ืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืกื™ืžืŸ ืฉืืœื” ื‘ืชื•ืš ืื•ืชื• ืžืขืจืš. ื”ื•ืกืคืชื™ ื’ื ืฉื ืœ Extract ื‘ืฉื‘ื™ืœ ืœื ืœื›ืชื•ื‘ ืื•ืชื• ืคืขืžื™ื™ื ื•ืงื™ื‘ืœืชื™:
type Event =
  | { type: 'login', payload: { username: string }}
  | { type: 'logout', payload: undefined }
  | { type: 'sendMessage', payload: { to: string, text: string }};

function handle<
  E extends Event,
  EventType extends E["type"],

ToCode
1 419
this.el.style.top = `${this.y - 10}px`;
    }

    remove() {
        document.body.removeChild(this.el);
    }
}


function escaping(shape: Circle) {
    shape.el.addEventListener('click', shape.move.bind(shape));
    return shape;
}

function animate(shape: Circle) {
    shape.el.style.left = "0px";
    shape.el.style.top = "0px";
    
    shape.move = () => {
        shape.x = Math.floor(Math.random() * window.innerWidth);
        shape.y = Math.floor(Math.random() * window.innerHeight);
        anime({
            targets: shape.el,
            translateX: shape.x,
            translateY: shape.y,
            duration: 800
          });
    }
    return shape;
}

const c1 = escaping(new Circle());
const r1 = squarify(escaping(new Circle()));
const c3 = escaping(animate(new Circle()));
ืžืขื‘ืจ ืœืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉื‘ื” ืื ื™ "ืžืœื‘ื™ืฉ" ืชื›ื•ื ื•ืช ืขืœ ืื•ื‘ื™ืงื˜ื™ื, ื‘ืžืงื•ื ื›ื–ื• ืฉื‘ื” ืื ื™ ืžื’ื“ื™ืจ ืชื›ื•ื ื•ืช ืœืžื—ืœืงื•ืช, ื”ื•ืคืš ืืช ื”ืงื•ื“ ืฉืœื™ ืœื”ืจื‘ื” ื™ื•ืชืจ ื’ืžื™ืฉ ื›ื™ื•ื•ืŸ ืฉืืคืฉืจ ื›ืœ ื”ื–ืžืŸ ืœื™ืฆื•ืจ ืฆื™ืจื•ืคื™ื ื—ื“ืฉื™ื ื‘ืœื™ ืœื™ืฆื•ืจ ืืช ื”ืฆื™ืจื•ืคื™ื ื”ืงื•ื“ืžื™ื ืฉื‘ื ื™ืชื™.

ToCode
1 419
ืขื›ืฉื™ื• ืื ื™ ื™ื›ื•ืœ ืœืขื“ื›ืŸ ืืช ืงื•ื“ ื”ืจื™ื‘ื•ืข ื›ื“ื™ ืœื‘ื˜ืœ ืืช ื”ืื ื™ืžืฆื™ื”. ืื ื™ ื™ื›ื•ืœ ื’ื ืœื”ื•ืฆื™ื ืžื—ืœืงื” ืฉืœื™ืฉื™ืช ืฉืœ "ืฆื•ืจื” ื‘ื•ืจื—ืช" ืขื ื”ืงื•ื“ ื”ืžืฉื•ืชืฃ ื‘ื™ื ื™ื”ื, ื•ืœืขื“ื›ืŸ ืจืง ืืช ื”ืขื™ื’ื•ืœ ืœื–ื•ื– ืขื ืื ื™ืžืฆื™ื”, ืื‘ืœ ืฉื ื™ ื”ืคื™ืชืจื•ื ื•ืช ืœื ื‘ืืžืช ืขื•ื–ืจื™ื ืœื˜ื•ื•ื— ื”ืจื—ื•ืง. ื›ื›ืœ ืฉื”ืžืขืจื›ืช ืชื’ื“ืœ, ื™ื”ื™ื• ืœื ื• ื™ื•ืชืจ ืžืืคื™ื™ื ื™ื ื™ื™ื—ื•ื“ื™ื™ื ืœื›ืœ ืฆื•ืจื”, ื•ื”ื™ืจืจื›ื™ื™ืช ื”ื™ืจื•ืฉื” ืฉื ื‘ื ื” ืœื ืชืฆืœื™ื— ืœื”ื›ื™ืœ ืื•ืชื. ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืฉืื—ื“ ื”ืœืงื•ื—ื•ืช ืจื•ืฆื” ืฉื”ืขื™ื’ื•ืœ ื™ืฉื ื” ืฆื‘ืข ื›ืœ ืคืขื ืฉืงื•ืคืฅ ืœืžืงื•ื ื—ื“ืฉ, ืื• ืฉืฆื•ืจื•ืช ืžืกื•ื™ืžื•ืช ื™ื–ื•ื–ื• ื›ืฉืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ ืžืกื•ื™ื ื‘ืžืงืœื“ืช ื•ืื—ืจื•ืช ืœื, ืื• ืฉื™ื”ื™ื• ืœื ื• ืฆื•ืจื•ืช ืฉื‘ื ื•ื™ื•ืช ืžื™ื•ืชืจ ืž div ืื—ื“, ื•ื“ืจื™ืฉื•ืช ืจื‘ื•ืช ื ื•ืกืคื•ืช. ืžื” ืฉื™ื•ืชืจ ื’ืจื•ืข ื”ื•ื ืฉื”ืžื‘ื ื” ืฉื™ืฆืจื ื• ืžื—ื™ื™ื‘ ืฉื›ืœ ืขื™ื’ื•ืœ ื™ืงื‘ืœ ืืช ื›ืœ ื”ืชื›ื•ื ื•ืช ืฉืœ "ืขื™ื’ื•ืœ" ื›ืš ืฉืขื›ืฉื™ื• ื›ืœ ื”ืขื™ื’ื•ืœื™ื ื‘ืžืขืจื›ืช ื™ืชื—ื™ืœื• ืœื–ื•ื– ื‘ืื ื™ืžืฆื™ื”. ื›ื›ืœ ืฉื ืจืฆื” ืœื™ื™ืฆืจ ืขื™ื’ื•ืœื™ื ืžืกื•ื™ืžื™ื ืขื ืื ื™ืžืฆื™ื” ื•ืื—ืจื™ื ื‘ืœื™, ื”ื™ืจืจื›ื™ื™ืช ื”ื™ืจื•ืฉื” ืฉืœื ื• ืจืง ืชืชื ืคื— ืขื•ื“ ื™ื•ืชืจ ื•ื™ื”ื™ื” ืœื ื• ืงืฉื” ืœื”ื‘ื™ืŸ ืขืœ ืื™ื–ื” ืฆื•ืจื•ืช ืžืฉืคื™ืข ื›ืœ ืขื“ื›ื•ืŸ. ## ืžื” ืืคืฉืจ ืœืขืฉื•ืช ื‘ืžืงื•ื ื“ืจืš ื˜ื•ื‘ื” ื™ื•ืชืจ ื”ื™ื ืœื”ื•ืกื™ืฃ ืืช ื”ืžืืคื™ื™ื ื™ื ื”ืžืฉื•ืชืคื™ื ื‘ื–ืžืŸ ืจื™ืฆื” ืœืื•ื‘ื™ืงื˜ื™ื ื‘ืžืงื•ื ืœืžื—ืœืงื•ืช. ื‘ืฆื•ืจื” ื›ื–ืืช ื™ืฉ ืœื ื• ื’ืžื™ืฉื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ื’ื“ื•ืœื” ืœื™ืฆื•ืจ ืขื™ื’ื•ืœื™ื ืžืกื•ื™ืžื™ื ืฉื–ื–ื™ื ื‘ืื ื™ืžืฆื™ื” ื•ืื—ืจื™ื ืฉืœื, ืจื™ื‘ื•ืขื™ื ืžืกื•ื™ืžื™ื ืฉืžืฉื ื™ื ืฆื‘ืข ื›ืœ ืคืขื ืฉืงื•ืคืฆื™ื ื•ืื—ืจื™ื ืฉืœื, ืฆื•ืจื•ืช ืžืกื•ื™ืžื•ืช ืฉืฆืจื™ื›ื•ืช ืœื”ื™ื‘ื ื•ืช ืจืง ืขื div ืื—ื“ ื•ืื—ืจื•ืช ืฉืฆืจื™ื›ื•ืช ื™ื•ืชืจ ืž div ืื—ื“. ื‘ืฉื‘ื™ืœ "ืœื”ืœื‘ื™ืฉ" ื”ืชื ื”ื’ื•ืช ืขืœ ืฆื•ืจื” ื›ืœ ืžื” ืฉืื ื™ ืฆืจื™ืš ื–ื” ืคื•ื ืงืฆื™ื” ืฉืžืงื‘ืœืช ืฆื•ืจื” ื•ืžื—ื–ื™ืจื” ืืช ื”ืฆื•ืจื” ืขื ื”ื”ืชื ื”ื’ื•ืช ื”ื—ื“ืฉื” ืฉืœื”. ืื ื™ ื™ื›ื•ืœ ืœืืคื™ื™ืŸ ื›ื›ื” ืืคื™ืœื• ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื‘ืกื™ืกื™ืช ืฉืœ ืœื”ื™ืขืœื ื•ืœื”ื•ืคื™ืข ื‘ืžืงื•ื ื—ื“ืฉ ื›ืฉืœื•ื—ืฆื™ื ืขืœื™ืš, ื•ื›ืžื•ื‘ืŸ ืืช ื”ืื ื™ืžืฆื™ื”, ืฉื™ื ื•ื™ ื”ืฆื‘ืข ืื• ื›ืœ ื”ืชื ื”ื’ื•ืช ืื—ืจืช. ืื ื™ ื—ื•ื–ืจ ืœื ืงื•ื“ืช ื”ื”ืชื—ืœื” ืขื ื”ืขื™ื’ื•ืœ ื”ื‘ื•ืจื—, ื•ื”ืคืขื ืืฆื•ืจ ืืช ื”ืจื™ื‘ื•ืข ื‘ื“ืจืš ืื—ืจืช. ื‘ืžืงื•ื ืœื™ืฆื•ืจ ืžื—ืœืงื” ืฉื™ื•ืจืฉืช ืžื”ืขื™ื’ื•ืœ ืื ื™ ื›ื•ืชื‘ ืคื•ื ืงืฆื™ื”:
function squarify(shape: EscapingCircle) {
    shape.el.style.borderRadius = "0";
    return shape;
}
ื‘ืฉื‘ื™ืœ ืฉื”ืงื•ื“ ื™ืชืงืžืคืœ ืฆืจื™ืš ืœืขื“ื›ืŸ ืืช ืžืืคื™ื™ื ื™ ื”ื’ื™ืฉื” ืฉืœ EscapingCircle:
class EscapingCircle {
    public el: HTMLDivElement;
    public x: number = 0;
    public y: number = 0;
    public colors = ['red', 'blue', 'green', 'purple', 'orange', 'pink', 'yellow'];
    ...
ื•ื‘ืฉื‘ื™ืœ ืœื™ืฆื•ืจ ืจื™ื‘ื•ืข ื•ืขื™ื’ื•ืœ ืื ื™ ื™ื›ื•ืœ ืœื”ืคืขื™ืœ:
const c1 = new EscapingCircle();
const r1 = squarify(new EscapingCircle());
ืขื›ืฉื™ื• ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืžืฉื™ืš ื‘ืื•ืชื” ื“ืจืš ืœืžืžืฉ ื’ื ืืช ื”ื”ืชื ื”ื’ื•ื™ื•ืช ื”ื—ื“ืฉื•ืช ื”ื ื•ืกืคื•ืช. ื ื™ืกื™ื•ืŸ ืจืืฉื•ืŸ ืฉืœื™ ืœืžืžืฉ ืืช ื”ืื ื™ืžืฆื™ื” ื™ื›ื•ืœ ืœื”ื™ืจืื•ืช ื›ืš:
function animate(shape: EscapingCircle) {
    shape.move = () => {
        shape.x = Math.floor(Math.random() * window.innerWidth);
        shape.y = Math.floor(Math.random() * window.innerHeight);
        anime({
            targets: shape.el,
            translateX: shape.x,
            translateY: shape.y,
            duration: 800
          });
    }
    return shape;
}
ืื‘ืœ ื–ื” ืขื“ื™ื™ืŸ ืœื ืขื•ื‘ื“. ื‘ืžื—ืœืงื” EscapingCircle ื”ื‘ื ืื™ ื›ื‘ืจ ืงื•ืฉืจ ืืช ื”ืื™ืจื•ืขื™ื ื‘ืฉื•ืจื”:
this.el.addEventListener('click', this.move.bind(this));
ื•ืœื›ืŸ ื›ืฉื”ืคื•ื ืงืฆื™ื” animate ื ืงืจืืช ื”ื™ื ืžืฉื ื” ืืช ื”ืคื•ื ืงืฆื™ื” move ืฉืœ ื”ืฆื•ืจื”, ืื‘ืœ ื–ื” ืœื ืขื•ื–ืจ ื›ื™ ืืฃ ืื—ื“ ืœื ืžืคืขื™ืœ ืืช move. ืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืข ื—ื•ื‘ืจ ืœืคื ื™ ืฉ animate ื”ื•ืคืขืœื”. ื•ื›ืŸ ืื ื™ ื™ื•ื“ืข ืœื›ืชื•ื‘ ืงื•ื“ ืฉื™ืกื™ืจ ืืช ื”ื—ื™ื‘ื•ืจ ืœืื™ืจื•ืข click ื•ื™ื™ืฆื•ืจ ื—ื™ื‘ื•ืจ ื—ื“ืฉ, ืื‘ืœ ื™ื•ืชืจ ื—ื›ื ื™ื”ื™ื” ืœื—ื–ื•ืจ ืœืงื•ื“ ืฉืœ EscapingCircle ื•ืœืขื“ื›ืŸ ืื•ืชื• ื›ื“ื™ ืฉื™ื”ื™ื” ื™ื•ืชืจ ืงืœ ืœื”ืจื—ื‘ื”. ืืคืฉืจ ืœืžืฉืœ ืœื”ื•ืฆื™ื ืืช ื”ื”ืชื ื”ื’ื•ืช ืฉืœ "ืœื‘ืจื•ื— ื›ืฉืœื•ื—ืฆื™ื ืขืœื™ืš" ืœืขื•ื“ ืคื•ื ืงืฆื™ื” ื—ื™ืฆื•ื ื™ืช:
class Circle {
    public el: HTMLDivElement;
    public x: number = 0;
    public y: number = 0;
    public colors = ['red', 'blue', 'green', 'purple', 'orange', 'pink', 'yellow'];

    constructor() {
        this.el = document.createElement('div');
        this.el.style.width = '20px';
        this.el.style.height = '20px';
        this.el.style.borderRadius = '20px';        
        this.el.style.background = this.colors[Math.floor(Math.random() * this.colors.length)];
        this.el.style.position = 'absolute';
        this.move();

        document.body.appendChild(this.el);
    }

    move = () => {
        this.x = Math.floor(Math.random() * window.innerWidth);
        this.y = Math.floor(Math.random() * window.innerHeight);
        this.el.style.left = `${this.x - 10}px`;

ToCode
1 419
# ื™ืจื•ืฉื”? ืœื ื‘ื‘ื™ืช ืกืคืจื ื• ืื—ืช ื”ืชื‘ื ื™ื•ืช ื”ื›ื™ ืคื•ืคื•ืœืจื™ื•ืช ืœืฉื™ืชื•ืฃ ืงื•ื“ ื‘ืžืขืจื›ื•ืช ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื ื ืงืจืืช ื™ืจื•ืฉื”, ืื‘ืœ ืœืžืจื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœื” ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื™ืจื•ืฉื” ื”ื™ื ื”ืคื™ืชืจื•ืŸ ื”ืœื ื ื›ื•ืŸ ื•ื’ื•ืจืžืช ืœื™ื•ืชืจ ื ื–ืง ืžืชื•ืขืœืช. ื‘ื•ืื• ื ืจืื” ื“ื•ื’ืžื” ืงื˜ื ื” ืื™ืš ื•ืœืžื” ื™ืจื•ืฉื” ื ืฉื‘ืจืช ื•ืžื” ืืคืฉืจ ืœืขืฉื•ืช ื‘ืžืงื•ื. ## ื ืงื•ื“ืช ื”ื”ืชื—ืœื” ื ื ื™ื— ืฉื™ืฉ ืœื ื• ื›ื‘ืจ ืžืขืจื›ืช ื”ื›ืชื•ื‘ืช ื‘ื’ื™ืฉื” ืžื•ื ื—ื™ืช ืขืฆืžื™ื ื•ื‘ืชื•ื›ื” ืžื—ืœืงื” ืขื‘ื•ืจ ื›ื“ื•ืจ-ื‘ื•ืจื—. ื›ื“ื•ืจ ื‘ื•ืจื— ื”ื•ื ืคืฉื•ื˜ ืขื™ื’ื•ืœ ืฉืžื•ืคื™ืข ืขืœ ื”ืžืกืš ื•ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœื™ื• ื”ื•ื ื‘ื•ืจื— ืœืžืงื•ื ืื—ืจ. ืžื™ืžื•ืฉ ืœื“ื•ื’ืžื” ื‘ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ื›ื•ืœ ืœื”ื™ืจืื•ืช ื›ืš:
class EscapingCircle {
    private el: HTMLDivElement;
    private x: number = 0;
    private y: number = 0;
    private colors = ['red', 'blue', 'green', 'purple', 'orange', 'pink', 'yellow'];
    constructor() {
        this.el = document.createElement('div');
        this.el.style.width = '20px';
        this.el.style.height = '20px';
        this.el.style.borderRadius = '20px';        
        this.el.style.background = this.colors[Math.floor(Math.random() * this.colors.length)];
        this.el.style.position = 'absolute';
        this.move();

        this.el.addEventListener('click', this.move.bind(this));

        document.body.appendChild(this.el);
    }

    move() {
        this.x = Math.floor(Math.random() * window.innerWidth);
        this.y = Math.floor(Math.random() * window.innerHeight);
        this.el.style.left = `${this.x - 10}px`;
        this.el.style.top = `${this.y - 10}px`;
    }

    remove() {
        document.body.removeChild(this.el);
    }
}

const c1 = new EscapingCircle();
ื”ื›ื“ื•ืจ ื”ื–ื” ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื‘ื›ืžื” ืžืงื•ืžื•ืช ื‘ืžืขืจื›ืช ื•ื›ื•ืœื ืžืื•ื“ ืžืจื•ืฆื™ื ืžืžื ื•, ืขื“ ืฉืื—ื“ ื”ืœืงื•ื—ื•ืช ืžื’ื™ืข ืขื ื‘ืงืฉื” ืงืฆืช ืžื•ื–ืจื” - ื”ื•ื ื™ืฉืžื— ืœืงื‘ืœ "ืจื™ื‘ื•ืข ื‘ื•ืจื—", ืฉื–ื” ื‘ื“ื™ื•ืง ื›ืžื• ืขื™ื’ื•ืœ ื‘ื•ืจื— ืื‘ืœ ื‘ืฆื•ืจืช ืจื™ื‘ื•ืข. ## ืื ื™ ื™ื•ื“ืข! ืืฉืชืžืฉ ื‘ื™ืจื•ืฉื” ื›ืžื• ืฉื™ื•ื“ืขื™ื ื›ืœ ืžืชื›ื ืช ื•ืžืชื›ื ืชืช ื”ืงื•ื“ ื”ื›ื™ ื˜ื•ื‘ ื”ื•ื ืงื•ื“ ืฉืœื ืฆืจื™ืš ืœื›ืชื•ื‘ ืื•ืชื•, ื•ื™ืจื•ืฉื” ืžืืคืฉืจืช ืœื™ ืœืคืชื•ืจ ืืช ื‘ืขื™ื™ืช ื”ืจื™ื‘ื•ืข ื›ืžืขื˜ ื‘ืœื™ ืœื›ืชื•ื‘ ืงื•ื“. ื–ื• ื‘ืœื‘ื“ ืกื™ื‘ื” ืžืื•ื“ ืžืคืชื” ืœื”ืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ: 1. ืื ื™ ืžืฉื ื” ืืช ืžืืคื™ื™ืŸ ื”ื’ื™ืฉื” ืฉืœ this.el ืžืคืจื˜ื™ ืœืžื•ื’ืŸ. 2. ืื ื™ ื™ื•ืจืฉ ืžื”ืขื™ื’ื•ืœ ื”ื‘ื•ืจื— ื•ืžื•ืกื™ืฃ ืœื‘ื ืื™ ืฉื•ืจื” ืฉืžืขื“ื›ื ืช ืืช ื”ืกื˜ื™ื™ืœ ืฉืœ ื”ืืœืžื ื˜ ืœืจื™ื‘ื•ืข. ื–ื” ื”ืงื•ื“ ืฉืœ ื”ืจื™ื‘ื•ืข:
class EscapingSquare extends EscapingCircle {
    constructor() {
        super();
        this.el.style.borderRadius = "0";
    }
}
ื•ื‘ืžื—ืœืงื” ืฉืœ ื”ืขื™ื’ื•ืœ ืื ื™ ืฆืจื™ืš ืœืฉื ื•ืช ืืช ื”ื’ื“ืจืช ืฉื“ื” ื”ืžื™ื“ืข this.el ื‘ืื•ืคืŸ ื”ื‘ื:
class EscapingCircle {
    protected el: HTMLDivElement;
    ...
ื”ื›ืœื•ื ืงื•ื“ ืฉื›ืชื‘ืชื™ ืขื•ื‘ื“, ื”ืœืงื•ื— ืžืจื•ืฆื” ื•ืืคืฉืจ ืœืœื›ืช ืœื™ื. ื›ืŸ? ## ื“ืจื™ืฉื” ื—ื“ืฉื” ืื—ืจื™ ื”ืคื™ืชืจื•ืŸ ื”ืžื‘ืจื™ืง ืžื’ื™ืข ื”ื˜ืœืคื•ืŸ ื”ื‘ื ืžื”ืœืงื•ื— ืฉืžืฉืชืžืฉ ื‘ืขื™ื’ื•ืœ ื”ื ืขืœื. ื”ื•ื ื”ื™ื” ืจื•ืฆื” ืฉื”ืขื™ื’ื•ืœ ืฉืœื• ื™ืชื—ื™ืœ ืœื–ื•ื– ื‘ืื ื™ืžืฆื™ื”. ืื™ืŸ ื‘ืขื™ื”, ืื ื™ ืžื›ื™ืจ ืืช ื”ืกืคืจื™ื” anime.js, ืื ื™ ืจืง ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืื•ืชื” ืœืคืจื•ื™ืงื˜ ืขื:
$ npm install --save animejs @types/animejs
ื•ืœืขื“ื›ืŸ ืืช ืงื•ื“ ื”ืขื™ื’ื•ืœ ื›ื“ื™ ืฉื™ื–ื•ื– ืขื ืื ื™ืžืฆื™ื”:
import anime from 'animejs/lib/anime.es.js';

class EscapingCircle {
    protected el: HTMLDivElement;
    private x: number = 0;
    private y: number = 0;
    private colors = ['red', 'blue', 'green', 'purple', 'orange', 'pink', 'yellow'];
    constructor() {
        this.el = document.createElement('div');
        this.el.style.width = '20px';
        this.el.style.height = '20px';
        this.el.style.borderRadius = '20px';        
        this.el.style.background = this.colors[Math.floor(Math.random() * this.colors.length)];
        this.el.style.position = 'absolute';
        this.move();

        this.el.addEventListener('click', this.move.bind(this));

        document.body.appendChild(this.el);
    }

    move() {
        this.x = Math.floor(Math.random() * window.innerWidth);
        this.y = Math.floor(Math.random() * window.innerHeight);
        anime({
            targets: this.el,
            translateX: this.x,
            translateY: this.y,
            duration: 800
          });
        }

    remove() {
        document.body.removeChild(this.el);
    }
}
ืจืื™ืชื ืžื” ืงืจื” ืฉื? ืืคื™ืœื• ืฉืœื ืฉื™ื ื™ืชื™ ืฉื•ืจืช ืงื•ื“ ื‘ื•ื“ื“ืช ื‘ืžื—ืœืงื” ืฉืœ ื”ืจื™ื‘ื•ืข ื”ื‘ื•ืจื—, ื’ื ื”ื•ื ืงื™ื‘ืœ ืืช ื”ืื ื™ืžืฆื™ื”.

ToCode
1 419
ืขื•ื“ ืขืฉืจ ื“ืงื•ืช ื•ื•ื‘ื™ื ืจ ืขืœ ืคืœืืกืง ื‘ื™ื™ืก ืžื•ื–ืžื ื™ื ืœื”ืฆื˜ืจืฃ https://us06web.zoom.us/j/81695264435?pwd=ZFZURUE1WmtTSUxRbHZKeHZiTmRyQT09

ToCode
1 419
# ืžื—ืฉื‘ื•ืช ืขืœ ืคืจื™ืฆื” ืœืžื—ืฉื‘ื™ ืคื™ืชื•ื— ื›ื›ืœ ืฉื ื—ืฉืคื™ื ื”ืคืจื˜ื™ื ืขืœ ื”ืคื™ืจืฆื” ืœ lastpass, ืงืœ ืœืจืื•ืช ืืช ื”ื“ืžื™ื•ืŸ ืœืคืจื™ืฆื” ืœ SolarWinds ื•ืฉืชื™ื”ืŸ ืžื–ืžื™ื ื•ืช ืื•ืชื ื• ืœื”ืชืขื•ืจืจ ื•ืœื”ื’ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืขืœ ืกื‘ื™ื‘ื•ืช ื”ืคื™ืชื•ื— ืฉืœื ื•. ื‘ืžืงืจื” ืฉืœ SolarWinds ื”ืืงืจื™ื ื”ืฉื™ื’ื• ื’ื™ืฉื” ืœืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื—, ื”ื•ืกื™ืคื• ืงื•ื“ ื–ื“ื•ื ื™ ืœืžื•ืฆืจ ื•ื“ืจื›ื• ืคืจืฆื• ืœืื™ื ืกื•ืฃ ื—ื‘ืจื•ืช ื•ืืจื’ื•ื ื™ื ืžืžืฉืœืชื™ื™ื ืฉื”ืกืชืžื›ื• ืขืœ ืื•ืชื• ืžื•ืฆืจ. ื‘ืžืงืจื” ืฉืœ LastPass ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืขื™ื ืžื” ื”ื™ืงืฃ ื”ื ื–ืง, ื•ื›ืจื’ืข ืจืง ื™ื“ื•ืข ืฉื”ืืงืจื™ื ื™ืฉื‘ื• ื‘ืžืฉืš 4 ื™ืžื™ื ื‘ืจืฉืช ื”ืคื ื™ืžื™ืช ื‘ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ืฉืœ ื”ื—ื‘ืจื”. ืžื—ืฉื‘ื™ ืคื™ืชื•ื— ื ืชืคืกื™ื ื‘ื”ืจื‘ื” ืžืงื•ืžื•ืช ื‘ืชื•ืจ ืื–ื•ืจ "ื—ื•ืคืฉื™", ืžื—ืฉื‘ื™ื ืฉืืคืฉืจ ืœื”ืชืงื™ืŸ ืขืœื™ื”ื ื”ื›ืœ ื›ื“ื™ ืฉืžืคืชื—ื™ื ื™ื•ื›ืœื• ืœืฉื—ืง ืขื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช. ื”ืชื•ืฆืื” ืฉืืœื” ืžื—ืฉื‘ื™ื ืฉืžืื•ื“ ืงืฉื” ืœื”ื’ืŸ ืขืœื™ื”ื. ื”ื ื” ื›ืžื” ืจืขื™ื•ื ื•ืช ืฉื›ื“ืื™ ืœื™ื™ืฉื ืขื•ื“ ื”ื™ื•ื ื›ื“ื™ ืœื”ืชื—ื™ืœ ืœื”ืชืžื•ื“ื“ ืขื ืืชื’ืจื™ ื”ืื‘ื˜ื—ื” ืฉื–ื” ื™ื•ืฆืจ: 1. ื—ืชื™ืžื” ืขืœ ืงื•ืžื™ื˜ื™ื - ื›ื“ืื™ ืœื“ืจื•ืฉ ืžืžืคืชื—ื™ื ืœื—ืชื•ื ืขืœ ืงื•ืžื™ื˜ื™ื ื‘ืืžืฆืขื•ืช pgp, ื•ืœื”ืฉืชืžืฉ ื‘ืžืคืชื— ืขื ืกื™ืกืžื”. ื›ืš ืคื•ืจืฅ ืฉืœื ื™ื•ื“ืข ืืช ื”ืกื™ืกืžื”, ืืคื™ืœื• ืื ื”ืฆืœื™ื— ืœื”ื™ื›ื ืก ืœืจืฉืช ื•ืœื”ืฉืชืœื˜ ืขืœ ืžื—ืฉื‘ ืคื™ืชื•ื—, ืœื ื™ื•ื›ืœ ืœื”ื—ื“ื™ืจ ืงื•ื“ ื–ื“ื•ื ื™ ืœ Source Control. 2. ื”ื’ื‘ืœืช ื’ื™ืฉื” ืœืžื›ื•ื ื•ืช ื‘ื ื™ื” - ืจืฆื•ื™ ืœื ืœืืคืฉืจ ื’ื™ืฉื” ืžืžื—ืฉื‘ ืคื™ืชื•ื— ืœืžื›ื•ื ืช ื‘ื ื™ื”, ื•ืฉื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืฉืžืชื›ื ืชื™ื ื™ื•ื›ืœื• ืœื”ื›ื ื™ืก ืงื•ื“ ื—ื“ืฉ ื”ื™ื ื“ืจืš ื” Source Control. 3. ื”ื’ื‘ืœืช ื’ื™ืฉื” ืœืกื‘ื™ื‘ื•ืช ืคืจื•ื“ืงืฉืŸ ืื• ื‘ื“ื™ืงื•ืช - ื™ืฉ ืœื”ืฉืชืžืฉ ืจืง ื‘ืžืคืชื—ื•ืช ืžื•ื’ื ื™ื ื‘ืกื™ืกืžื” ื›ื“ื™ ืœื’ืฉืช ืœืžื›ื•ื ื•ืช ืื—ืจื•ืช. ื”ืงืœื“ืช ืกื™ืกืžื” ืœืคื ื™ ื›ืœ ืฉื™ืžื•ืฉ ื‘ืžืคืชื— ืžื‘ื˜ื™ื—ื” ืฉื’ื ืื ืคื•ืจืฅ ื”ืฉืชืœื˜ ืขืœ ืžื—ืฉื‘ ืคื™ืชื•ื— ืœื ื™ื”ื™ื” ืœื• ืœืืŸ ืœื”ืžืฉื™ืš ืžืฉื. 4. ืฉื•ื•ื” ืœื”ื–ื›ื™ืจ ืœืžืคืชื—ื™ื ืฉื”ืžื—ืฉื‘ื™ื ืฉืœื”ื ืื™ื ื ื‘ื˜ื•ื—ื™ื ื•ืฉืœื ื›ื“ืื™ ืฉื™ืฉืžืจื• ืกื™ืกืžืื•ืช, ืžืคืชื—ื•ืช ื’ื™ืฉื” ืื• ื›ืœ ืžื–ื”ื” ืกื•ื“ื™ ืื—ืจ ื‘ืฉื•ื ืžืงื•ื ืขืœ ื”ืžื—ืฉื‘. 5. ืงื•ื“ ืฉื ื›ื ืก ืœ Source Control ืœืขื ืฃ ืฉืžืžื ื• ื”ื•ืœื›ื™ื ืœื‘ื ื•ืช ื’ื™ืจืกื” ื—ื™ื™ื‘ ืœืขื‘ื•ืจ Code Review ืขืœ ื™ื“ื™ ืžืกืคืจ ืื ืฉื™ ืฆื•ื•ืช ืื—ืจื™ื. 6. ื‘ืจืžืช ืฉื™ืจื•ืชื™ ืขื ืŸ ืฉื•ื•ื” ืœื”ืฉืชืžืฉ ื‘ืžืฆื‘ ื’ืœื™ืฉื” ืคืจื˜ื™ืช ื›ืœ ืคืขื ืฉื ื›ื ืกื™ื ืœืžืžืฉืงื™ ื ื™ื”ื•ืœ ืžื‘ื•ืกืกื™ ื•ื•ื‘ ืฉืœ ืฉื™ืจื•ืชื™ ื”ืขื ืŸ ืฉืœ ื”ืคืจื•ื“ืงืฉืŸ ื•ืœืกื’ื•ืจ ืืช ื”ื“ืคื“ืคืŸ ื›ืฉืžืกื™ื™ืžื™ื. ื›ื›ืœ ืฉื ืงื“ื™ื ืœื”ื‘ื™ืŸ ืฉื”ืžื—ืฉื‘ ืฉืœื ื• ื”ื•ื ืžื˜ืจื”, ื•ืฉืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื”ื•ื ื›ื‘ืจ ื ืคืจืฅ ื›ื“ื™ ืœื”ื’ื™ืข ืœื™ืขื“ ื™ื•ืชืจ ืžืขื ื™ื™ืŸ, ื›ืš ื ื•ื›ืœ ืœืงื—ืช ืืช ื”ืฆืขื“ื™ื ื›ื“ื™ ืœืขืฆื•ืจ ืืช ื”ืชืงื™ืคื” ืœืคื ื™ ืฉื™ื™ื’ืจื ื ื–ืง ืืžื™ืชื™.

ToCode
1 419
# ืชื–ื›ื•ืจืช ืœื•ื•ื‘ื™ื ืจ: ืคื™ืชื•ื— ืžืขืจื›ื•ืช ื•ื•ื‘ ืขื flask-base ืื ืจื•ืฆื™ื ืœื›ืชื•ื‘ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช, ืืœื’ื•ืจื™ืชืžื™ืงื” ืื• ืืคื™ืœื• ืกืงืจื™ืคื˜ื™ื ืœืชื—ื–ื•ืงืช ืฉืจืช ืคื™ื™ืชื•ืŸ ื”ื™ื ื”ืื•ืคืฆื™ื” ื”ืจืืฉื•ื ื” ืฉืขื•ืœื” ืœืจืืฉ. ืื‘ืœ ื‘ืคื™ืชื•ื— ื•ื•ื‘ ืคื™ื™ืชื•ืŸ ื ืจืื™ืช ื›ืžื• ืื•ืคืฆื™ื” ื”ืจื‘ื” ืคื—ื•ืช ืžืจื’ืฉืช. ืœืคื™ื™ืชื•ืŸ ื™ืฉ ืฉื ื™ Web Frameworks ืžืจื›ื–ื™ื™ื ื‘ืฉื Django ื• Flask. ื“ื’'ื ื’ื• ื ื—ืฉื‘ ืœืคื™ืชืจื•ืŸ ื”ื•ืœื™ืกื˜ื™ ืฉื™ื™ืชืŸ ืœื›ื ืชืฉื•ื‘ื” ืœื›ืœ ืืชื’ืจ ื‘ืคื™ืชื•ื— ื”ืžืขืจื›ืช, ืื‘ืœ ื™ื•ืชืจ ืงืฉื” ืœืœืžื•ื“ ืื•ืชื• ื•ื™ื•ืชืจ ืงืฉื” ืœื”ืชืื™ื ืื•ืชื• ืœื›ืœ Use Case ื‘ื’ืœืœ ืฉื”ื•ื ื›ื•ืœืœ ืืช ื”ื›ืœ. ื‘ Django ืžืฉืชืžืฉื™ื ื’ื ื‘ืชืขืฉื™ื” ื‘ืžืกืคืจ ื—ื‘ืจื•ืช ื’ื“ื•ืœื•ืช ื›ื•ืœืœ ืื™ื ืกื˜ื’ืจื, ื“ื™ืกืงืืก, ืื™ื•ื•ื ื˜-ื‘ืจื™ื™ื˜ ื• Prezi. ืคืœืืกืง ื”ื•ื ืคื™ืชืจื•ืŸ ื”ืจื‘ื” ื™ื•ืชืจ ืงื˜ืŸ ืฉืžืื•ื“ ืงืœ ืœื”ืชืงื™ืŸ ื•ืœื‘ื ื•ืช ื‘ืขื–ืจืชื• ืžืžืฉืง ื•ื•ื‘ ืœืžืขืจื›ื•ืช ืคื™ื™ืชื•ืŸ ืงื™ื™ืžื•ืช, ืื‘ืœ ื›ืฉืฆืจื™ืš ืคื™ืฆ'ืจื™ื ืžืชืงื“ืžื™ื ื›ืžื• ืฉืœื™ื—ืช ืื™ืžื™ื™ืœ, ื ื™ื”ื•ืœ ืžืฉื™ืžื•ืช ื‘ืจืงืข, ื—ื™ื‘ื•ืจ ืœ APIs ื—ื™ืฆื•ื ื™ื™ื ืื• ืืคื™ืœื• ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ืื ื—ื ื• ืฆืจื™ื›ื™ื ื›ื‘ืจ ืœื”ืชื—ื™ืœ ืœื”ื•ืกื™ืฃ ืœืคืœืืกืง ืกืคืจื™ื•ืช ื ื•ืกืคื•ืช, ื•ืœื ืชืžื™ื“ ื‘ืจื•ืจ ื‘ืื™ื–ื” ื›ืœื™ ื”ื›ื™ ื›ื“ืื™ ืœื”ืฉืชืžืฉ. ื”ืฉื™ืžื•ืฉ ื‘ืคืœืืกืง ื‘ืชืขืฉื™ื” ื”ื•ื ืžืื•ื“ ื ืจื—ื‘, ื•ื”ืจื‘ื” ืžืžื ื• ื›ื“ื™ ืœืคืชื— ื›ืœื™ื ืคื ื™ืžื™ื™ื ืื• ืžืžืฉืงื™ื ืคื ื™ืžื™ื™ื ืœื›ืœื™ื ืงื™ื™ืžื™ื ื‘ Python. ื‘ื•ื•ื‘ื™ื ืจ ืžื—ืจ ืขืจืŸ ื’ื•ืœื“ืžืŸ ืžืœื›ื ื™ืฆื™ื’ ื›ืœื™ ื‘ืฉื flask-base ืฉื ื•ืชืŸ ืชื‘ื ื™ืช ื”ืชื—ืœื” ืžืงื™ืคื” ื™ื•ืชืจ ืœื™ื™ืฉื•ืžื™ ืคืœืืกืง ืžื”ืฉืœื“ ื”ื‘ืกื™ืกื™ ืฉืœ ืคืœืืกืง. ื”ืชื‘ื ื™ืช ืฉืœ ืคืœืืกืง ื‘ื™ื™ืก ื›ื‘ืจ ืžืชืื™ืžื” ืœืคื™ืชื•ื— ืžืขืจื›ื•ืช ื•ื•ื‘ ื’ื“ื•ืœื•ืช ื™ื•ืชืจ ื•ื›ื•ืœืœืช ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื, ื—ื™ื‘ื•ืจ ืœ DB, ื˜ืคืกื™ื, ื˜ื™ืคื•ืœ ื‘ Assets, ืฉืœื™ื—ืช ืžื™ื™ืœื™ื ื•ื‘ื™ืฆื•ืข ืžืฉื™ืžื•ืช ื‘ืจืงืข. ืื ื‘ื ืœื›ื ืœืœืžื•ื“ ืื™ืš ืœื‘ื ื•ืช ืžืขืจื›ืช ื•ื•ื‘ ื‘ื–ืจื™ื–ื•ืช ื•ื‘ืฉืคื” ืฉืืชื ื›ื‘ืจ ืžื›ื™ืจื™ื ื•ืื•ื”ื‘ื™ื, ืื• ืœืœืžื•ื“ ืื™ืš ืœื‘ื ื•ืช ืžืžืฉืง ื•ื•ื‘ื™ ืœื›ืœื™ ืคื™ื™ืชื•ืŸ ืงื™ื™ื ืฉื™ืฉ ืœื›ื, ื”ื•ื•ื‘ื™ื ืจ ืžื—ืจ ื™ื›ื•ืœ ืžืื•ื“ ืœื”ืชืื™ื. ื ื™ืคื’ืฉ ื‘ื–ื•ื ื‘ืขืฉืจ ื‘ื‘ื•ืงืจ, ืงื™ืฉื•ืจ ื™ืฉื™ืจ ืœื›ื ื™ืกื” ื™ืคื•ืจืกื ื‘ืงื‘ื•ืฆืช ื˜ืœื’ืจื ื•ื’ื ื™ื™ืฉืœื— ื‘ืžื™ื™ืœ ืœืืœื” ืžื›ื ืฉื™ื™ืจืฉืžื• ื‘ืฆื™ืจื•ืฃ ืชื–ื›ื•ืจืช ืฉืขื” ืœืคื ื™ ื”ืคื’ื™ืฉื”. ื–ื” ื”ืงื™ืฉื•ืจ ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ื•ื”ืจืฉืžื”: https://www.tocode.co.il/workshops/120 ื ืชืจืื” ื‘ื•ื•ื‘ื™ื ืจ

ToCode
1 419
# ืฉื‘ืข ืกื™ื‘ื•ืช ื‘ื’ืœืœืŸ ืื ื—ื ื• ืœื ื›ื•ืชื‘ื™ื ื‘ื“ื™ืงื•ืช 1. ืื ื™ ืœื ืกื•ืžืš ืขืœื™ื”ืŸ. ืžืžื™ืœื ืื—ืจื™ ื›ืœ ืฉื™ื ื•ื™ ืื ื™ ืžืจื™ืฅ ืืช ื” flow ืœื‘ื“ ืœืจืื•ืช ืฉื”ื›ืœ ืขื•ื‘ื“. 2. ื”ืŸ ืœื ืฉื•ื•ืช ืืช ื”ื”ืฉืงืขื”. ืคื™ืชื•ื— ืขื ื‘ื“ื™ืงื•ืช ืœื•ืงื— ืœื™ ืœืคืขืžื™ื ืคื™ 4 ื–ืžืŸ ืžืืฉืจ ืคื™ืชื•ื— ืื•ืชื• ืคื™ืฆ'ืจ ื‘ืœื™ ื”ื‘ื“ื™ืงื•ืช, ื•ืœืคื™ืฆ'ืจื™ื ืงื˜ื ื™ื ื–ื” ื‘ื•ืœื˜ ื‘ืžื™ื•ื—ื“. 3. ื”ืŸ ืžืื˜ื•ืช ืื•ืชื™ ื›ืฉืื ื™ ืฆืจื™ืš ืœืฉื ื•ืช ืงื•ื“. ืคืชืื•ื ื‘ื“ื™ืงื•ืช ืžืกื•ื™ืžื•ืช ืœื ืขื•ื‘ื“ื•ืช ื•ืื ื™ ืœื ื™ื•ื“ืข ืœืžื” ื•ืื ื–ื• ื‘ืขื™ื” ื‘ื‘ื“ื™ืงื•ืช ืื• ื‘ืงื•ื“ ื”ืืžื™ืชื™. 4. ื›ืฉื”ื‘ื“ื™ืงื•ืช ืœื ืขื•ื‘ื“ื•ืช ื”ื•ื“ืขื•ืช ื”ืฉื’ื™ืื” ืฉืœื”ืŸ ืžื•ื–ืจื•ืช. ื›ื‘ืจ ืงืจื” ืœื™ ื›ืžื” ืคืขืžื™ื ืฉื™ืฉื‘ืชื™ ืฉืขื•ืช ื•ืืคื™ืœื• ื™ืžื™ื ืขืœ ื”ื•ื“ืขืช ืฉื’ื™ืื” ืœื ื ื›ื•ื ื” ืžืชืฉืชื™ืช ื”ื‘ื“ื™ืงื•ืช ื›ืฉื‘ืคื•ืขืœ ื‘ืงื•ื“ ืœื ื”ื™ืชื” ืฉื•ื ื‘ืขื™ื”. 5. ืกืคืจื™ื•ืช ื”ื‘ื“ื™ืงื•ืช ืขืฆืžืŸ ืžืชื™ื™ืฉื ื•ืช ื•ืงืจื” ืœื™ ื›ื‘ืจ ืฉืฉื™ื“ืจื’ืชื™ ืชืœื•ื™ื•ืช, ื•ื’ื™ืจืกื” ื—ื“ืฉื” ืฉืœ ืกืคืจื™ื™ืช ื”ื‘ื“ื™ืงื•ืช ื“ืจืฉื” ืžืžื ื™ ืœืฉื ื•ืช ืžืื•ืช ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ ื‘ื“ื™ืงื•ืช ื›ื™ ืžืฉื”ื• ื‘ืžืžืฉืง ื”ืฉืชื ื”. 6. ื’ื ื›ืฉื ื™ืกื™ืชื™ ืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ื‘ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ื”ื™ื• ื”ืจื‘ื” ื‘ืื’ื™ื. ืื™ ืืคืฉืจ ืœื›ืกื•ืช ื‘ื‘ื“ื™ืงื•ืช ืืช ื›ืœ ื”ื“ื‘ืจื™ื ืฉืžืฉืชืžืฉ ืขืฉื•ื™ ืœื‘ืฆืข. 7. ื™ื•ืชืจ ื›ื™ืฃ ืœื›ืชื•ื‘ ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื, ืื• ืœืชืงืŸ ื‘ืื’ื™ื ืฉืžืคืจื™ืขื™ื ืœืžืฉืชืžืฉื™ื. ืื ื‘ืฆื•ื•ืช ืฉืœื›ื ื™ืฉ ืื ืฉื™ื ืฉืžืชื ื’ื“ื™ื ืœื›ืชื™ื‘ืช ื‘ื“ื™ืงื•ืช ืฉื•ื•ื” ืœื‘ืจืจ ืœืžื” ื•ืœืขื–ื•ืจ ืœื”ื ืœื”ืชื’ื‘ืจ ืขืœ ื”ืžื›ืฉื•ืœ ื”ืกืคืฆื™ืคื™ ืฉืขื•ืฆืจ ืื•ืชื. ื›ืœ 7 ื”ืกื™ื‘ื•ืช ื›ืืŸ ื”ืŸ ื“ืื’ื•ืช ืืžื™ืชื™ื•ืช ืฉืœ ืžืชื›ื ืชื™ื ืืžื™ืชื™ื™ื ืฉื ื™ืกื• ืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ื•ื•ื™ืชืจื• ืขืœ ื–ื”. ืืœ ืชื˜ืื˜ืื• ืื•ืชื ืžืชื—ืช ืœืฉื˜ื™ื—. ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ื›ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืœืžื” ืœืฆืคื•ืช, ืื™ื–ื” ืžื›ืฉื•ืœื™ื ื™ื’ื™ืขื• ื•ืื™ืš ืื ืฉื™ื ืื—ืจื™ื ืžืชืžื•ื“ื“ื™ื ืื™ืชื.

ToCode
1 419
# ืœื ืœืžื‘ื—ืŸ ืดืžื” ืขื“ื™ืฃ, ืœืขืฉื•ืช ืฉื™ืขื•ืจื™ ื‘ื™ืช ืื• ืœื”ืฆืœื™ื— ื‘ืžื‘ื—ืŸ?ืด ื”ืฉืืœื” ื”ื–ืืช ื™ื›ื•ืœื” ืœื ืงื– ืืช ื›ืœ ื”ื˜ืขื•ื™ื•ืช ืฉืœ ืžืขืจื›ืช ื”ื—ื™ื ื•ืš ื•ื‘ืžืฉืคื˜ ืื—ื“. ื›ื™ ื‘ืจื•ืจ ืฉื”ืžื˜ืจื” ืฉืœ ื‘ืชื™ ืกืคืจ ื•ื’ื ืื•ื ื™ื‘ืจืกื™ื˜ืื•ืช ื”ื™ื ืฉืชืขื‘ืจื• ืืช ื”ืžื‘ื—ืŸ; ื‘ืจื•ืจ ืฉืฉื™ืขื•ืจื™ ื”ื‘ื™ืช ื”ื ืฉื ื‘ืฉื‘ื™ืœ ืœืขื–ื•ืจ ืœื›ื ืœื”ืฆืœื™ื— ื‘ืžื‘ื—ืŸ, ืื‘ืœ ืœื ื›ื•ืœื "ืฆืจื™ื›ื™ื" ืื•ืชื, ื•ื‘ืจื•ืจ ืฉืืฃ ืื—ื“ ืœื ื™ื‘ืœื‘ืœ ืืช ื”ืžื•ื— ืœืชืœืžื™ื“ ืฉืžืงื‘ืœ ืžืื™ื•ืช ื‘ื›ืœ ื”ืžื‘ื—ื ื™ื ื’ื ืื ื”ื•ื ืœื ืžื›ื™ืŸ ืฉื™ืขื•ืจื™ ื‘ื™ืช. ืื‘ืœ ื›ืฉืžืกืชื›ืœื™ื ืขืœ ื”ื—ื™ื™ื ื•ืžื” ื—ืฉื•ื‘ ืงืœ ืœืจืื•ืช ืฉื”ืžื˜ืจื” ื”ืคื•ื›ื”: 1. ืืฃ ืื—ื“ ืœื ื™ื•ื“ืข ืžืจืืฉ ืœืืŸ ื›ื“ืื™ ืœื”ื’ื™ืข ื•ืื™ื–ื• ืจืžืช ืžื™ื•ืžื ื•ืช ื ืฆื˜ืจืš. 2. ืœืื ืฉื™ื ืฉื•ื ื™ื ื™ืฉ ืžื˜ืจื•ืช ืฉื•ื ื•ืช. 3. ืื ื—ื ื• ืžื‘ืœื™ื ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ ื‘"ืฉื™ืขื•ืจื™ ื‘ื™ืช" ืžืืฉืจ ื‘"ืžื‘ื—ื ื™ื". 4. ื‘ืจื•ื‘ ื”ืžืงืจื™ื ืœ"ื›ื™ืฉืœื•ืŸ" ืื•"ื”ืฆืœื—ื”" ื‘ืจื’ืข ืื—ื“ ืฉืœ ืžื‘ื—ืŸ ืื™ืŸ ื”ืฉืคืขื” ื“ืจืžื˜ื™ืช ืขืœ ื”ื—ื™ื™ื ืฉืœื ื•. ืื ื ืคืชื— ืืช ื–ื” ืœื“ื•ื’ืžื” ืฉืœ ื‘ืŸ ืื“ื ืฉืจื•ืฆื” ืœื”ืชืงื‘ืœ ืœืขื‘ื•ื“ื” ื—ื“ืฉื”, ืงืœ ืœืจืื•ืช ืื™ืš ื‘ื•ื’ืจ ืžืขืจื›ืช ื”ื—ื™ื ื•ืš ื™ืกืชื›ืœ ืขืœ ื”ืžืฉื™ืžื” - ืจืื™ื•ืŸ ืขื‘ื•ื“ื” ื”ื•ื ื”"ืžื‘ื—ืŸ", ืœืคื ื™ ื”ืจืื™ื•ืŸ ื›ื“ืื™ ืœืฉื‘ืช ื•ืœื”ืชื›ื•ื ืŸ ื›ืžื” ื™ืžื™ื (ืื• ืฉื‘ื•ืขื•ืช) ื‘ื‘ื™ืช, ื•ื”ืฆืœื—ื” ืื• ื›ื™ืฉืœื•ืŸ ื‘ืจืื™ื•ืŸ ื”ื ื‘ืขืœื™ ืคื•ื˜ื ืฆื™ืืœ ืœืฉื ื•ืช ื“ืจืžื˜ื™ืช ืืช ื”ื—ื™ื™ื ืฉืœื™, ื›ื™ ืื•ืœื™ ืื’ื™ืข ืœืขื‘ื•ื“ื” ื™ื•ืชืจ ืžืขื ื™ื™ื ืช ืื• ืขื ื™ื•ืชืจ ื›ืกืฃ. ืื• ื‘ื“ื•ื’ืžื” ื ื•ืกืคืช ืžืชื›ื ืชืช ืฉืžื ืกื” ืœืงื‘ืœ ื”ืฉืงืขื” ืœืกื˜ืืจื˜-ืืค ืฉื”ื™ื ืจื•ืฆื” ืœื”ืงื™ื ืขืฉื•ื™ื” ืœื”ืกืชื›ืœ ืขืœ ื”ืคื’ื™ืฉื” ืขื ื”ืžืฉืงื™ืข ื›ืžื• ืžื‘ื—ืŸ, ื•ืœื”ืขื‘ื™ืจ ืืช ื”ื™ืžื™ื ืื• ืฉื‘ื•ืขื•ืช ืœืคื ื™ ื”ืคื’ื™ืฉื” ื‘ืœื™ ืฉื™ื ื” ื•ื‘ืชื™ืงื•ื ื™ ื‘ืื’ื™ื ื‘ MVP ื›ื“ื™ ืœื”ื’ื™ืข ื›ืžื” ืฉื™ื•ืชืจ ืžื•ื›ื ื” ืœื“ืžื•. ืื‘ืœ ืชืคื™ืกืช ืขื•ืœื ืฉืžืชืžืงื“ืช ื‘ืฉื™ืขื•ืจื™ ื”ื‘ื™ืช ื”ื™ืชื” ืžื•ื‘ื™ืœื” ืื•ืชื ื• ืœื”ืชื ื”ืœื•ืช ืื—ืจืช ืœื’ืžืจื™, ื•ืœื“ืขืชื™ ื™ื•ืชืจ ื‘ืจื™ืื”: ื”ืžืชื›ื ืช ืฉืœื ืžืจื•ืฆื” ืžื”ืขื‘ื•ื“ื” ืฉืœื• ื™ืจื•ื•ื™ื— ืื ื”ื•ื ื™ืชื—ื™ืœ ืขื•ื“ ื”ื™ื•ื ืœืœืžื•ื“ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื•ืœื”ืฉืงื™ืข ื™ื•ืชืจ ื–ืžืŸ ื‘ืชื•ืš ื™ื•ื ื”ืขื‘ื•ื“ื” ื‘ืฉื™ืœื•ื‘ ืื•ืชืŸ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช, ืื ื‘ืืžืฆืขื•ืช ื”ื›ื ืกืช ืคืจื•ื™ืงื˜ื™ื ื—ื“ืฉื™ื ืœืืจื’ื•ืŸ, ื‘ืืžืฆืขื•ืช ืื™ืจื’ื•ืŸ ื”ืจืฆืื•ืช ื”ืขืฉืจื”, ืื• ื‘ื›ืชื™ื‘ืช ืคืจื•ื™ืงื˜ื™ ืฆื“. ืžืชื›ื ืชื™ื ืฉื›ื‘ืจ ืœื•ืงื—ื™ื ื—ืœืง ื‘ืคื™ืชื•ื— ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ืื• ืคืขื™ืœื™ื ื‘ืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ืžื•ืฆืื™ื ื™ื•ืชืจ ื‘ืงืœื•ืช ื”ื–ื“ืžื ื•ื™ื•ืช ื•ื’ื ื›ืฉืžื’ื™ืขื™ื ืœืจืื™ื•ืŸ ื”ื ื›ื‘ืจ ื™ื›ื•ืœื™ื ืœืกืคืจ ืขืœ ื›ืœ ื”ืขื‘ื•ื“ื” ืฉื”ื ืขืฉื• ืขืœ ืคืจื•ื™ืงื˜ื™ื ื“ื•ืžื™ื ื‘ืขื‘ืจ. ื”ืฆืœื—ื” ืื• ื›ื™ืฉืœื•ืŸ ื‘ืจืื™ื•ืŸ ืขื‘ื•ื“ื” ื›ืžืขื˜ ืœื ื™ืฉืคื™ืขื• ืขืœ ื”ื—ื™ื™ื ืฉืœ ืื•ืชื• ืžืชื›ื ืช, ืฉื™ืžืฉื™ืš ืœืขื‘ื•ื“ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื”ื•ื ื‘ื•ื—ืจ ื‘ื›ืœ ืžืงื•ื ื‘ื• ื”ื•ื ื ืžืฆื. ื•ื”ืžืชื›ื ืชืช ืฉืจื•ืฆื” ืœื‘ื ื•ืช ืกื˜ืืจื˜-ืืค ื™ื›ื•ืœื” ืœื‘ื—ื•ืจ ื‘ื›ื™ื•ื•ืŸ ืฉืœ ื‘ื•ื˜ืกื˜ืจืค ื•ืœื‘ื ื•ืช ืžื•ืฆืจ ืฉืžื”ื™ื•ื ื”ืจืืฉื•ืŸ ืื ืฉื™ื ื™ืจืฆื• ืœืฉืœื ืขืœื™ื•. ื›ื›ืœ ืฉืœื—ื‘ืจื” ื™ื”ื™ื• ื™ื•ืชืจ ื”ื›ื ืกื•ืช ื”ืฉื™ื—ื” ืขื ื”ืžืฉืงื™ืขื™ื ืžืงื‘ืœืช ืื•ืคื™ ืื—ืจ ื•ืœื”ืฆืœื—ื” ืื• ื›ื™ืฉืœื•ืŸ ื‘ื’ื™ื•ืก ื”ืฉืงืขื” ืœื ืชื”ื™ื” ื”ืฉืคืขื” ื“ืจืžื˜ื™ืช ืขืœ ืขืชื™ื“ ื”ืคืจื•ื™ืงื˜. ื”ื”ืชื ื”ื’ื•ืช ื•ื”ื‘ื—ื™ืจื•ืช ืฉืœื ื• ืžื•ืฉืคืขื•ืช ืžืชืคื™ืกืช ื”ืขื•ืœื ืฉืœื ื• ื›ืœื•ืžืจ ืžืื™ืš ืฉืื ื—ื ื• ื—ื•ืฉื‘ื™ื ืฉื”ืขื•ืœื ืขื•ื‘ื“. ื›ืฉืื ื—ื ื• ื‘ื˜ื•ื—ื™ื ืฉ"ื›ืœ ื“ื‘ืจ ื”ื•ื ืžื‘ื—ืŸ" ืื ื—ื ื• ื ื—ืคืฉ ืืช ื”ืžื‘ื—ื ื™ื ื”ืืœื” ื•ื ื ื•ื•ื˜ ืœืชื•ืš ื“ืจื›ื™ื ืฉื‘ื”ืŸ ื‘ืืžืช ื›ืœ ื“ื‘ืจ ื”ื•ื ืžื‘ื—ืŸ. ื™ืฉ ืื ืฉื™ื ืฉืื•ื”ื‘ื™ื ืืช ื”ืฉื™ื˜ื” ื”ื–ืืช ื•ืื ื”ื™ื ืžืชืื™ืžื” ืœื›ื ื”ืจื•ื•ื—ืชื, ืื‘ืœ ืฉื•ื•ื” ืœื–ื›ื•ืจ ืฉื”ื™ื ืœื ื”ื™ื—ื™ื“ื” ื•ืื ื”ื™ื ืœื ืžืชืื™ืžื” ืœื›ื ืืคืฉืจ ืœื”ืชืืžืฅ ื•ืœื”ื—ืœื™ืฃ.

ToCode
1 419
# ืฉื™ืชื•ืฃ ืชื•ื›ืŸ ื‘ Mobile Web ืœื ืžื–ืžืŸ ืคืจืกืžื• ื‘ Smashing ืจืฉื™ืžื” ืฉืœ Web APIs ืคื—ื•ืช ืžื•ื›ืจื™ื, ื•ื‘ื™ื ื™ื”ื ื’ื™ืœื™ืชื™ ืืช ื”ืื•ืฆืจ ืขืœื™ื• ืืกืคืจ ืœื›ื ื‘ืคื•ืกื˜ ื”ื–ื”. ## ืžื” ื–ื” ืฉื™ืชื•ืฃ ืชื•ื›ืŸ ื’ื ืื ื“ืจื•ืื™ื“ ื•ื’ื ืื™ื™ืคื•ืŸ ืžื›ื™ืœื™ื ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื“ื™ืืœื•ื’ ืฉื™ืชื•ืฃ - ืžืฉืชืžืฉ ืœื•ื—ืฅ ืขืœ ื›ืคืชื•ืจ ื‘ืื™ื–ื•ืฉื”ื™ ืืคืœื™ืงืฆื™ื”, ื•ืื– ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ื˜ืœืคื•ืŸ ืžืจืื” ืจืฉื™ืžื” ืฉืœ ืืคืœื™ืงืฆื™ื•ืช ืฉื“ืจื›ืŸ ืืคืฉืจ ืœืฉืชืฃ ืืช ื”ืชื•ื›ืŸ. ื‘ื“ืจืš ื›ืœืœ ื–ื” ื™ื”ื™ื” "ืฉืžื™ืจื” ืœืคืชืงื™ื", "ื™ืฆื™ืจืช ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™", "ืฉืžื™ืจื” ืœืžืกืžื›ื™ื" ื•ื›ืžื•ื‘ืŸ ืฉื™ืชื•ืฃ ื“ืจืš ืืคืœื™ืงืฆื™ื•ืช ื”ืžืกืจื™ื. ื’ื ืขืœ ืžื—ืฉื‘ื™ Desktop ื™ืฉ ืžื ื’ื ื•ืŸ ื“ื•ืžื”, ืœืžืจื•ืช ืฉื”ื•ื ืคื—ื•ืช ืžื•ื›ืจ ื•ื”ืจื‘ื” ืคื—ื•ืช ื ืชืžืš. ื” Web API ืฉืœ ืฉื™ืชื•ืฃ ืชื•ื›ืŸ ืคืฉื•ื˜ ืžืืคืฉืจ ืœื ื• ืœื”ืฉืชืžืฉ ื‘ืื•ืชื• ื“ื™ืืœื•ื’ ืฉื™ืชื•ืฃ ื’ื ืžืชื•ืš ืืคืœื™ืงืฆื™ื™ืช ื•ื•ื‘ ืื• ืืชืจ ืžื•ืชืื. ื‘ื™ืŸ ื”ื“ื•ื’ืžืื•ืช ื”ื˜ื•ื‘ื•ืช ืœืฉื™ืžื•ืฉ ื‘ืžื ื’ื ื•ืŸ ืืคืฉืจ ืœืžืฆื•ื - ืฉื™ืชื•ืฃ ืคื•ืกื˜ื™ื ื‘ื‘ืœื•ื’ (ื›ืคืชื•ืจ ืฉื™ื™ื›ื ืก ื‘ื’ื™ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ื”ื‘ืœื•ื’ ื”ื–ื”), ืฉื™ืชื•ืฃ ื›ืจื˜ื™ืก ืžื™ื“ืข, ืฉื™ืชื•ืฃ ืื™ืฉ ืงืฉืจ, ืฉื™ืชื•ืฃ ืžืฉื™ืžื”, ืฉื™ืชื•ืฃ ืžืกืžืš ื•ืžืงืจื™ื ื“ื•ืžื™ื ื ื•ืกืคื™ื. ## ืื™ืš ื–ื” ืขื•ื‘ื“ ืฉืชื™ ื”ืคื•ื ืงืฆื™ื•ืช ื”ื™ื—ื™ื“ื•ืช ืฉ API ื”ืŸ: 1. navigator.canShare() ืฉืžื—ื–ื™ืจื” ื”ืื ื”ื“ืคื“ืคืŸ ืชื•ืžืš ื‘ืฉื™ืชื•ืฃ ื”ืžื™ื“ืข ืžื”ืกื•ื’ ืฉืจืฆื™ืชื 2. navigator.share() ืฉืคื•ืชื—ืช ืืช ื“ื™ืืœื•ื’ ื”ืฉื™ืชื•ืฃ ืงื•ื“? ื‘ืจื•ืจ. ื”ื ื” ื”ื’ื™ืจืกื” ื”ืžื•ื˜ืžืขืช ื‘ืงื•ื“ืคืŸ: <iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/WNJpaxw?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href="https://codepen.io/ynonp/pen/WNJpaxw"> Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>) on <a href="https://codepen.io">CodePen</a>. </iframe> ื•ื”ืงื•ื“ ืขืฆืžื• ื”ื•ื ื‘ืกืš ื”ื›ืœ:
const share = async (shareData) => {
  try {
    await navigator.share(shareData);
  } catch (error) {
    console.error(error);
  }
};

const shareButton = document.querySelector("#share-button");

shareButton.addEventListener("click", () => {
    let shareData = {
      title: "you rock",
      text: "Visit https://www.tocode.co.il to find great programming resources"
    };

    share(shareData);
});
## ืžื’ื‘ืœื•ืช ืœ API ื™ืฉ ืžืกืคืจ ืžื’ื‘ืœื•ืช ืฉื›ื“ืื™ ืœื”ื›ื™ืจ: 1. ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” share ืจืง ื‘ืชื’ื•ื‘ื” ืœืื™ืจื•ืข ืฉื™ื–ื ื”ืžืฉืชืžืฉ - ืœื“ื•ื’ืžื” ืœื—ื™ืฆื” ืขืœ ื›ืคืชื•ืจ. 2. ืืคืฉืจ ืœืฉืชืฃ ืจืง ืžืชื•ืš ืืชืจื™ https. 3. ืชืžื™ื›ืช ื“ืคื“ืคื ื™ื ื™ื—ืกื™ืช ืžื•ื’ื‘ืœืช. ื–ื” ืขื•ื‘ื“ ื˜ื•ื‘ ื‘ืžื•ื‘ื™ื™ืœ, ื›ืจื•ื ืขืœ ื—ืœื•ื ื•ืช ื•ืกืคืืจื™ ื‘ืžืง. ื”ืื•ื‘ื™ืงื˜ ืขืฆืžื• ืฉืžืฉืชืคื™ื ื›ื•ืœืœ 4 ืกื•ื’ื™ ืžื™ื“ืข ืฉืืคืฉืจ ืœืฉืชืฃ: url, text, title ื• files. ืœื ื—ื™ื™ื‘ื™ื ืœื”ืขื‘ื™ืจ ืืช ื›ื•ืœื ื•ื‘ื“ื•ื’ืžื” ืฉืœื™ ื”ืขื‘ืจืชื™ ืจืง title ื• text.

ToCode
1 419
# ื˜ื™ืค ื˜ื™ื™ืคืกืงืจื™ืคื˜: ื–ื”ื™ืจื•ืช Tuples ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืžืกืคืง ืžืžืฉืง ื ื—ืžื“ ืœืžืขืจืš ืฉืื ื—ื ื• ื™ื•ื“ืขื™ื ืžืฉื”ื• ืขืœ ื”ืžื‘ื ื” ืฉืœื•, ืžื” ืฉื ืงืจื Tuple. ืœืžืฉืœ ืื ืื ื™ ืจื•ืฆื” ืœื™ื™ืฆื’ ืจื™ื‘ื•ืข ืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžืขืจืš ืฉื”ืขืจืš ื”ืจืืฉื•ืŸ ืฉืœื• ื”ื•ื ืื•ืจืš ื”ืฆืœืข, ืื—ืจื™ ื–ื” ืฉื ื™ ืžืกืคืจื™ื ืœื™ื™ืฆื’ ืืช ื” x ื•ื” y ืฉืœ ื”ืคื™ื ื” ื”ืฉืžืืœื™ืช ืขืœื™ื•ื ื” ื•ืื– ืžื—ืจื•ื–ืช ื›ื“ื™ ืœื™ื™ืฆื’ ืืช ื”ืฆื‘ืข:
const square = [10, 5, 2, 'red'];
ืื• ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืฉ ืœื™ ืจืฉื™ืžื” ืฉืœ ืžืฉืชืžืฉื™ื, ื•ืœื›ืœ ืžืฉืชืžืฉ ื™ืฉ ืžื–ื”ื” ืžืกืคืจื™, ื›ืชื•ื‘ืช ืื™ืžื™ื™ืœ ื•ืฉื. ืื– ืื ื™ ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ื˜ื™ืคื•ืก ืœืžืฉืชืžืฉ ื•ืœื”ื›ื ื™ืก ืืช ื›ื•ืœื ืœืจืฉื™ืžื”:
type User = [number, string, string];

const users: Array<User> = [
    [0, 'a@gmail.com', 'a'],
    [1, 'b@gmail.com', 'b'],
    [2, 'c@gmail.com', 'c'],
];
ื•ื–ื” ื ื—ืžื“ ื›ื™ ืื ืขื›ืฉื™ื• ืื ื™ ืื ืกื” ืœื”ื•ืกื™ืฃ ืžืฉืชืžืฉ ื—ื“ืฉ ืฉืœื ืžืชืื™ื ืœืชื‘ื ื™ืช ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ื•ื›ืœ ืœื”ืชืขืฆื‘ืŸ. ื”ืงื•ื“ ื”ื‘ื ืœืžืฉืœ ืœื ืžืชืงืžืคืœ:
type User = [number, string, string];

const users: Array<User> = [
    [0, 'a@gmail.com', 'a'],
    [1, 'b@gmail.com', 'b'],
    [2, 'c@gmail.com', 'c'],
];

users.push(['d']);
ืื– ืื ื”ื›ืœ ื›ืœ ื›ืš ื˜ื•ื‘ ืœืžื” ื”ื›ื•ืชืจืช ืฉืœ ื”ืคื•ืกื˜ ื”ื–ื” ืžืชื—ื™ืœื” ื‘ืžื™ืœื” "ื–ื”ื™ืจื•ืช" ืืชื ืฉื•ืืœื™ื? ื ื•, ื”ื‘ืขื™ื” ืขื Tuples ื–ื” ืฉืžืื•ื“ ืงืœ ืœืขื‘ื•ื“ ืขืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜. ื”ืงื•ื“ ื”ื–ื” ื“ื•ื•ืงื ื›ืŸ ืžืชืงืžืคืœ:
type User = [number, string, string];

const users: Array<User> = [
    [0, 'a@gmail.com', 'a'],
    [1, 'b@gmail.com', 'b'],
    [2, 'c@gmail.com', 'c'],
];

const u: User = [3, 'd@gmail.com', 'd'];
u.splice(0, 2);
// u is now: ['d']
users.push(u);
ืฉื•ื•ื” ืœืฉื™ื ืœื‘ ืฉื›ืฉืžืฉืชืžืฉื™ื ื‘ Tuples ื›ื“ืื™ ืชืžื™ื“ ืœื”ื•ืกื™ืฃ ืœื”ื Readonly ื›ื“ื™ ืฉืžืฉืชืžืฉื™ื ืœื ื™ื•ื›ืœื• (ื‘ื›ื•ื•ื ื” ืื• ื‘ื˜ืขื•ืช) ืœืจืžื•ืช. ื›ื›ื” ื–ื” ื ืจืื” ื›ืฉื” Tuple ืœืงืจื™ืื” ื‘ืœื‘ื“:
type User = Readonly<[number, string, string]>;

const users: Array<User> = [
    [0, 'a@gmail.com', 'a'],
    [1, 'b@gmail.com', 'b'],
    [2, 'c@gmail.com', 'c'],
];

const u: User = [3, 'd@gmail.com', 'd'];
u.splice(0, 2);
ื•ืขื›ืฉื™ื• ื”ืงื•ื“ ืฉื•ื‘ ืœื ืžืชืงืžืคืœ ื•ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื›ื•ืชื‘ ืขืœ ื”ืฉื•ืจื” ื”ืื—ืจื•ื ื”:
Property 'splice' does not exist on type 'readonly [number, string, string]'. Did you mean 'slice'?

ToCode
1 419
# ื—ื™ืคื•ืฉ ืชื—ื™ืœื™ืช ืžืฉื•ืชืคืช ื”ืืชื’ืจ ื”ืฉื‘ื•ืขื™ ื‘ืคืจืœ ืชืžื™ื“ ืžืฆื™ืข ืจืขื™ื•ื ื•ืช ื ื—ืžื“ื™ื ืœืชืจื’ื•ืœื™ื, ืืคื™ืœื• ื›ืฉืœื ืคื•ืชืจื™ื ืื•ืชื ื‘ืคืจืœ. ื”ื ื” ื”ืืชื’ืจ ื”ืฉื‘ื•ืข ื™ื—ื“ ืขื ืคื™ืชืจื•ืŸ ื‘ืฉืคืช Ruby. ## ื”ืืชื’ืจ ื‘ื”ื™ื ืชืŸ ืจืฉื™ืžื” ืฉืœ ืฉืžื•ืช ืงื‘ืฆื™ื, ืžืฆืื• ืืช ื”ื ืชื™ื‘ ื”ืขืžื•ืง ื‘ื™ื•ืชืจ ืฉืžื›ื™ืœ ืืช ื›ื•ืœื. ืœื“ื•ื’ืžื” ืขื‘ื•ืจ ืจืฉื™ืžืช ื”ืงืœื˜:
/a/b/c/1/x.pl
/a/b/c/d/e/2/x.pl
/a/b/c/d/3/x.pl
/a/b/c/4/x.pl
/a/b/c/d/5/x.pl
ื ืฆื˜ืจืš ืœื”ื—ื–ื™ืจ ืืช ื”ื ืชื™ื‘ /a/b/c ื›ื™ ื”ื•ื ื”ื ืชื™ื‘ ื”ืืจื•ืš ื‘ื™ื•ืชืจ ืฉืขื“ื™ื™ืŸ ืžื›ื™ืœ ืืช ื›ื•ืœื. ## ืคื™ืชืจื•ืŸ ื‘ืฉืคืช ืจื•ื‘ื™ ื”ืคื™ืชืจื•ืŸ ืœืชืจื’ื™ืœ ื”ื•ื ื”ื–ื“ืžื ื•ืช ืœื“ื‘ืจ ืขืœ ืชื—ื™ืœื™ื•ืช ืžืฉื•ืชืคื•ืช ื•ืžื‘ื ื” ื”ื ืชื•ื ื™ื Trie. ื–ื”ื• ืžื‘ื ื” ื ืชื•ื ื™ื ืžื‘ื•ืกืก ืขืฅ ืฉืžื™ื™ืฆื’ ืคื™ืฆื•ืœ ืฉืœ ืื—ื“ ื”ืงืœื˜ื™ื. ืื ื ื™ืงื— ืœื“ื•ื’ืžื” ืืช ื”ื ืชื™ื‘ ื”ืจืืฉื•ืŸ ืื– ื”ื•ื ื™ื™ื•ืฆื’ ืขืœ ื™ื“ื™ ื”ืขืฅ:
/a
    /b
        /c
            /1
                /x.pl
ื›ืืฉืจ ื›ืœ ืจืžื” ื‘ืื™ื ื“ื ื˜ืฆื™ื” ื”ื™ื ืฆื•ืžืช, ื•ื”ื™ืœื“ื™ื ืฉืœื” ื ืฉืžืจื™ื ื‘ืชื•ืš hash, ื›ืฉื”ืžืคืชื— ื”ื•ื ืฉื ื”ืชื™ืงื™ื” ื”ื‘ืื”. ื ื•ืกื™ืฃ ื’ื ืืช ื”ื ืชื™ื‘ ื”ืฉื ื™ ืœืื•ืชื• ืขืฅ ื•ื ืงื‘ืœ:
/a
    /b
        /c
            /1
                /x.pl
            /d
                /e
                    /2
                        /x.pl
ืฉืžื™ืจืช ื”ื ืชื•ื ื™ื ื‘ืขืฅ ืชื”ืคื•ืš ืืช ื—ื™ืคื•ืฉ ื”ื ืชื™ื‘ ื”ืขืžื•ืง ื‘ื™ื•ืชืจ ืฉืžื›ื™ืœ ืืช ื›ื•ืœื ืœื‘ืขื™ื” ืžืžืฉ ืงืœื” - ื ืชื—ื™ืœ ืœืฉื•ื˜ื˜ ื‘ืขืฅ ืžื”ื ืชื™ื‘ ื”ืจืืฉื™, ื•ืžืฉื ื›ืœ ืคืขื ืฉื™ืฉ ืฆื•ืžืช ืฉื™ืฉ ืœื• ืจืง ื™ืœื“ ืื—ื“ ื ื›ื ืก ืœืื•ืชื• ื™ืœื“. ืงื•ื“? ื‘ื˜ื—. ื ืชื—ื™ืœ ื‘ืžื—ืœืงื” Node ืฉื”ื™ื ื”ื‘ืกื™ืก ืœืขืฅ:
class Node
  attr_accessor :value, :children
  def initialize(value)
    @value = value
    @children = {}
  end

  def <<(path)
    return if path.length == 0

    next_part = path.shift
    @children[next_part] = Node.new(next_part) unless @children[next_part]
    @children[next_part] << path
  end
end
ื•ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ื›ื ื™ืก ืืช ื›ืœ ื”ื ืชื™ื‘ื™ื ืฉืœื ื• ืœืขืฅ:
paths = %W[
    /a/b/c/1/x.pl
    /a/b/c/d/e/2/x.pl
    /a/b/c/d/3/x.pl
    /a/b/c/4/x.pl
    /a/b/c/d/5/x.pl
]

root = Node.new("")
paths.each { |path| root << path.split('/') }
ื•ื‘ืกื•ืฃ ืœืจื•ืฅ ืขืœ ื”ืขืฅ ื•ืœื—ืคืฉ ืืช ื”ื ืชื™ื‘ ื”ื›ื™ ืขืžื•ืง ืฉืžื›ื™ืœ ืืช ื›ื•ืœื:
i = root
prefix = ""
loop do
  prefix += '/' + i.value unless i.value.empty?
  break unless i.children.length == 1
  i = i.children[i.children.keys[0]]
end
puts prefix
ืจื•ืฆื™ื ืœื ืกื•ืช ืœืคืชื•ืจ ื‘ืขื•ื“ ืฉืคื•ืช? ืื•ืœื™ ืืคื™ืœื• ื‘ืคืจืœ? ืžื•ื–ืžื ื™ื ืœืคืชื•ืจ ื•ืœืคืจืกื ื‘ืชื’ื•ื‘ื•ืช ืืช ื”ื’ื™ืจืกืื•ืช ืฉืœื›ื.