ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
-124 soatlar
Ma'lumot yo'q7 kunlar
-230 kunlar
Postlar arxiv
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"],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()));
ืืขืืจ ืืืจืืืืงืืืจื ืฉืื ืื ื "ืืืืืฉ" ืชืืื ืืช ืขื ืืืืืงืืื, ืืืงืื ืืื ืฉืื ืื ื ืืืืืจ ืชืืื ืืช ืืืืืงืืช, ืืืคื ืืช ืืงืื ืฉืื ืืืจืื ืืืชืจ ืืืืฉ ืืืืื ืฉืืคืฉืจ ืื ืืืื ืืืฆืืจ ืฆืืจืืคืื ืืืฉืื ืืื ืืืฆืืจ ืืช ืืฆืืจืืคืื ืืงืืืืื ืฉืื ืืชื.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`;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);
}
}
ืจืืืชื ืื ืงืจื ืฉื? ืืคืืื ืฉืื ืฉืื ืืชื ืฉืืจืช ืงืื ืืืืืช ืืืืืงื ืฉื ืืจืืืืข ืืืืจื, ืื ืืื ืงืืื ืืช ืืื ืืืฆืื.1 419
ืขืื ืขืฉืจ ืืงืืช ืืืืื ืจ ืขื ืคืืืกืง ืืืืก
ืืืืื ืื ืืืฆืืจืฃ
https://us06web.zoom.us/j/81695264435?pwd=ZFZURUE1WmtTSUxRbHZKeHZiTmRyQT09
1 419
# ืืืฉืืืช ืขื ืคืจืืฆื ืืืืฉืื ืคืืชืื
ืืื ืฉื ืืฉืคืื ืืคืจืืื ืขื ืืคืืจืฆื ื lastpass, ืงื ืืจืืืช ืืช ืืืืืื ืืคืจืืฆื ื SolarWinds ืืฉืชืืื ืืืืื ืืช ืืืชื ื ืืืชืขืืจืจ ืืืืื ืืื ืืืชืจ ืขื ืกืืืืืช ืืคืืชืื ืฉืื ื.
ืืืงืจื ืฉื SolarWinds ืืืงืจืื ืืฉืืื ืืืฉื ืืกืืืืช ืืคืืชืื, ืืืกืืคื ืงืื ืืืื ื ืืืืฆืจ ืืืจืื ืคืจืฆื ืืืื ืกืืฃ ืืืจืืช ืืืจืืื ืื ืืืฉืืชืืื ืฉืืกืชืืื ืขื ืืืชื ืืืฆืจ.
ืืืงืจื ืฉื LastPass ืื ืื ื ืขืืืื ืื ืืืืขืื ืื ืืืงืฃ ืื ืืง, ืืืจืืข ืจืง ืืืืข ืฉืืืงืจืื ืืฉืื ืืืฉื 4 ืืืื ืืจืฉืช ืืคื ืืืืช ืืกืืืืช ืืคืืชืื ืฉื ืืืืจื.
ืืืฉืื ืคืืชืื ื ืชืคืกืื ืืืจืื ืืงืืืืช ืืชืืจ ืืืืจ "ืืืคืฉื", ืืืฉืืื ืฉืืคืฉืจ ืืืชืงืื ืขืืืื ืืื ืืื ืฉืืคืชืืื ืืืืื ืืฉืืง ืขื ืืื ืืืืืืืช ืืืฉืืช. ืืชืืฆืื ืฉืืื ืืืฉืืื ืฉืืืื ืงืฉื ืืืื ืขืืืื. ืื ื ืืื ืจืขืืื ืืช ืฉืืืื ืืืืฉื ืขืื ืืืื ืืื ืืืชืืื ืืืชืืืื ืขื ืืชืืจื ืืืืืื ืฉืื ืืืฆืจ:
1. ืืชืืื ืขื ืงืืืืืื - ืืืื ืืืจืืฉ ืืืคืชืืื ืืืชืื ืขื ืงืืืืืื ืืืืฆืขืืช pgp, ืืืืฉืชืืฉ ืืืคืชื ืขื ืกืืกืื. ืื ืคืืจืฅ ืฉืื ืืืืข ืืช ืืกืืกืื, ืืคืืื ืื ืืฆืืื ืืืืื ืก ืืจืฉืช ืืืืฉืชืื ืขื ืืืฉื ืคืืชืื, ืื ืืืื ืืืืืืจ ืงืื ืืืื ื ื Source Control.
2. ืืืืืช ืืืฉื ืืืืื ืืช ืื ืื - ืจืฆืื ืื ืืืคืฉืจ ืืืฉื ืืืืฉื ืคืืชืื ืืืืื ืช ืื ืื, ืืฉืืืจื ืืืืืื ืฉืืชืื ืชืื ืืืืื ืืืื ืืก ืงืื ืืืฉ ืืื ืืจื ื Source Control.
3. ืืืืืช ืืืฉื ืืกืืืืืช ืคืจืืืงืฉื ืื ืืืืงืืช - ืืฉ ืืืฉืชืืฉ ืจืง ืืืคืชืืืช ืืืื ืื ืืกืืกืื ืืื ืืืฉืช ืืืืื ืืช ืืืจืืช. ืืงืืืช ืกืืกืื ืืคื ื ืื ืฉืืืืฉ ืืืคืชื ืืืืืื ืฉืื ืื ืคืืจืฅ ืืฉืชืื ืขื ืืืฉื ืคืืชืื ืื ืืืื ืื ืืื ืืืืฉืื ืืฉื.
4. ืฉืืื ืืืืืืจ ืืืคืชืืื ืฉืืืืฉืืื ืฉืืื ืืื ื ืืืืืื ืืฉืื ืืืื ืฉืืฉืืจื ืกืืกืืืืช, ืืคืชืืืช ืืืฉื ืื ืื ืืืื ืกืืื ืืืจ ืืฉืื ืืงืื ืขื ืืืืฉื.
5. ืงืื ืฉื ืื ืก ื Source Control ืืขื ืฃ ืฉืืื ื ืืืืืื ืืื ืืช ืืืจืกื ืืืื ืืขืืืจ Code Review ืขื ืืื ืืกืคืจ ืื ืฉื ืฆืืืช ืืืจืื.
6. ืืจืืช ืฉืืจืืชื ืขื ื ืฉืืื ืืืฉืชืืฉ ืืืฆื ืืืืฉื ืคืจืืืช ืื ืคืขื ืฉื ืื ืกืื ืืืืฉืงื ื ืืืื ืืืืกืกื ืืื ืฉื ืฉืืจืืชื ืืขื ื ืฉื ืืคืจืืืงืฉื ืืืกืืืจ ืืช ืืืคืืคื ืืฉืืกืืืืื.
ืืื ืฉื ืงืืื ืืืืื ืฉืืืืฉื ืฉืื ื ืืื ืืืจื, ืืฉืกืืืจ ืืื ืื ืฉืืื ืืืจ ื ืคืจืฅ ืืื ืืืืืข ืืืขื ืืืชืจ ืืขื ืืื, ืื ื ืืื ืืงืืช ืืช ืืฆืขืืื ืืื ืืขืฆืืจ ืืช ืืชืงืืคื ืืคื ื ืฉืืืืจื ื ืืง ืืืืชื.
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
ื ืชืจืื ืืืืืื ืจ
1 419
# ืฉืืข ืกืืืืช ืืืืื ืื ืื ื ืื ืืืชืืื ืืืืงืืช
1. ืื ื ืื ืกืืื ืขืืืื. ืืืืื ืืืจื ืื ืฉืื ืื ืื ื ืืจืืฅ ืืช ื flow ืืื ืืจืืืช ืฉืืื ืขืืื.
2. ืื ืื ืฉืืืช ืืช ืืืฉืงืขื. ืคืืชืื ืขื ืืืืงืืช ืืืงื ืื ืืคืขืืื ืคื 4 ืืื ืืืฉืจ ืคืืชืื ืืืชื ืคืืฆ'ืจ ืืื ืืืืืงืืช, ืืืคืืฆ'ืจืื ืงืื ืื ืื ืืืื ืืืืืื.
3. ืื ืืืืืช ืืืชื ืืฉืื ื ืฆืจืื ืืฉื ืืช ืงืื. ืคืชืืื ืืืืงืืช ืืกืืืืืช ืื ืขืืืืืช ืืื ื ืื ืืืืข ืืื ืืื ืื ืืขืื ืืืืืงืืช ืื ืืงืื ืืืืืชื.
4. ืืฉืืืืืงืืช ืื ืขืืืืืช ืืืืขืืช ืืฉืืืื ืฉืืื ืืืืจืืช. ืืืจ ืงืจื ืื ืืื ืคืขืืื ืฉืืฉืืชื ืฉืขืืช ืืืคืืื ืืืื ืขื ืืืืขืช ืฉืืืื ืื ื ืืื ื ืืชืฉืชืืช ืืืืืงืืช ืืฉืืคืืขื ืืงืื ืื ืืืชื ืฉืื ืืขืื.
5. ืกืคืจืืืช ืืืืืงืืช ืขืฆืื ืืชืืืฉื ืืช ืืงืจื ืื ืืืจ ืฉืฉืืืจืืชื ืชืืืืืช, ืืืืจืกื ืืืฉื ืฉื ืกืคืจืืืช ืืืืืงืืช ืืจืฉื ืืื ื ืืฉื ืืช ืืืืช ืฉืืจืืช ืฉื ืงืื ืืืืงืืช ืื ืืฉืื ืืืืฉืง ืืฉืชื ื.
6. ืื ืืฉื ืืกืืชื ืืืชืื ืืืืงืืช ืืคืจืืืงื ืขืืืื ืืื ืืจืื ืืืืื. ืื ืืคืฉืจ ืืืกืืช ืืืืืงืืช ืืช ืื ืืืืจืื ืฉืืฉืชืืฉ ืขืฉืื ืืืฆืข.
7. ืืืชืจ ืืืฃ ืืืชืื ืคืืฆ'ืจืื ืืืฉืื, ืื ืืชืงื ืืืืื ืฉืืคืจืืขืื ืืืฉืชืืฉืื.
ืื ืืฆืืืช ืฉืืื ืืฉ ืื ืฉืื ืฉืืชื ืืืื ืืืชืืืช ืืืืงืืช ืฉืืื ืืืจืจ ืืื ืืืขืืืจ ืืื ืืืชืืืจ ืขื ืืืืฉืื ืืกืคืฆืืคื ืฉืขืืฆืจ ืืืชื. ืื 7 ืืกืืืืช ืืื ืื ืืืืืช ืืืืชืืืช ืฉื ืืชืื ืชืื ืืืืชืืื ืฉื ืืกื ืืืชืื ืืืืงืืช ืืืืชืจื ืขื ืื. ืื ืชืืืืื ืืืชื ืืชืืช ืืฉืืื. ืืจืื ืืืชืจ ืงื ืืืชืื ืืืืงืืช ืืฉืื ืื ื ืืืืขืื ืืื ืืฆืคืืช, ืืืื ืืืฉืืืื ืืืืขื ืืืื ืื ืฉืื ืืืจืื ืืชืืืืืื ืืืชื.
1 419
# ืื ืืืืื
ืดืื ืขืืืฃ, ืืขืฉืืช ืฉืืขืืจื ืืืช ืื ืืืฆืืื ืืืืื?ืด
ืืฉืืื ืืืืช ืืืืื ืื ืงื ืืช ืื ืืืขืืืืช ืฉื ืืขืจืืช ืืืื ืื ืืืืฉืคื ืืื. ืื ืืจืืจ ืฉืืืืจื ืฉื ืืชื ืกืคืจ ืืื ืืื ืืืจืกืืืืืช ืืื ืฉืชืขืืจื ืืช ืืืืื; ืืจืืจ ืฉืฉืืขืืจื ืืืืช ืื ืฉื ืืฉืืื ืืขืืืจ ืืื ืืืฆืืื ืืืืื, ืืื ืื ืืืื "ืฆืจืืืื" ืืืชื, ืืืจืืจ ืฉืืฃ ืืื ืื ืืืืื ืืช ืืืื ืืชืืืื ืฉืืงืื ืืืืืช ืืื ืืืืื ืื ืื ืื ืืื ืื ืืืื ืฉืืขืืจื ืืืช.
ืืื ืืฉืืกืชืืืื ืขื ืืืืื ืืื ืืฉืื ืงื ืืจืืืช ืฉืืืืจื ืืคืืื:
1. ืืฃ ืืื ืื ืืืืข ืืจืืฉ ืืื ืืืื ืืืืืข ืืืืื ืจืืช ืืืืื ืืช ื ืฆืืจื.
2. ืืื ืฉืื ืฉืื ืื ืืฉ ืืืจืืช ืฉืื ืืช.
3. ืื ืื ื ืืืืื ืืจืื ืืืชืจ ืืื ื"ืฉืืขืืจื ืืืช" ืืืฉืจ ื"ืืืื ืื".
4. ืืจืื ืืืงืจืื ื"ืืืฉืืื" ืื"ืืฆืืื" ืืจืืข ืืื ืฉื ืืืื ืืื ืืฉืคืขื ืืจืืืืช ืขื ืืืืื ืฉืื ื.
ืื ื ืคืชื ืืช ืื ืืืืืื ืฉื ืื ืืื ืฉืจืืฆื ืืืชืงืื ืืขืืืื ืืืฉื, ืงื ืืจืืืช ืืื ืืืืจ ืืขืจืืช ืืืื ืื ืืกืชืื ืขื ืืืฉืืื - ืจืืืื ืขืืืื ืืื ื"ืืืื", ืืคื ื ืืจืืืื ืืืื ืืฉืืช ืืืืชืืื ื ืืื ืืืื (ืื ืฉืืืขืืช) ืืืืช, ืืืฆืืื ืื ืืืฉืืื ืืจืืืื ืื ืืขืื ืคืืื ืฆืืื ืืฉื ืืช ืืจืืืืช ืืช ืืืืื ืฉืื, ืื ืืืื ืืืืข ืืขืืืื ืืืชืจ ืืขื ืืื ืช ืื ืขื ืืืชืจ ืืกืฃ.
ืื ืืืืืื ื ืืกืคืช ืืชืื ืชืช ืฉืื ืกื ืืงืื ืืฉืงืขื ืืกืืืจื-ืืค ืฉืืื ืจืืฆื ืืืงืื ืขืฉืืื ืืืกืชืื ืขื ืืคืืืฉื ืขื ืืืฉืงืืข ืืื ืืืื, ืืืืขืืืจ ืืช ืืืืื ืื ืฉืืืขืืช ืืคื ื ืืคืืืฉื ืืื ืฉืื ื ืืืชืืงืื ื ืืืืื ื MVP ืืื ืืืืืข ืืื ืฉืืืชืจ ืืืื ื ืืืื.
ืืื ืชืคืืกืช ืขืืื ืฉืืชืืงืืช ืืฉืืขืืจื ืืืืช ืืืชื ืืืืืื ืืืชื ื ืืืชื ืืืืช ืืืจืช ืืืืจื, ืืืืขืชื ืืืชืจ ืืจืืื:
ืืืชืื ืช ืฉืื ืืจืืฆื ืืืขืืืื ืฉืื ืืจืืืื ืื ืืื ืืชืืื ืขืื ืืืื ืืืืื ืืื ืืืืืืืช ืืืฉืืช ืืืืฉืงืืข ืืืชืจ ืืื ืืชืื ืืื ืืขืืืื ืืฉืืืื ืืืชื ืืื ืืืืืืืช, ืื ืืืืฆืขืืช ืืื ืกืช ืคืจืืืงืืื ืืืฉืื ืืืจืืื, ืืืืฆืขืืช ืืืจืืื ืืจืฆืืืช ืืขืฉืจื, ืื ืืืชืืืช ืคืจืืืงืื ืฆื. ืืชืื ืชืื ืฉืืืจ ืืืงืืื ืืืง ืืคืืชืื ืืืื ืืืืืืืช ืืืฉืืช ืื ืคืขืืืื ืืคืจืืืงืื ืงืื ืคืชืื ืืืฆืืื ืืืชืจ ืืงืืืช ืืืืื ืืืืช ืืื ืืฉืืืืขืื ืืจืืืื ืื ืืืจ ืืืืืื ืืกืคืจ ืขื ืื ืืขืืืื ืฉืื ืขืฉื ืขื ืคืจืืืงืืื ืืืืื ืืขืืจ. ืืฆืืื ืื ืืืฉืืื ืืจืืืื ืขืืืื ืืืขื ืื ืืฉืคืืขื ืขื ืืืืื ืฉื ืืืชื ืืชืื ืช, ืฉืืืฉืื ืืขืืื ืืืื ืืืืืื ืฉืืื ืืืืจ ืืื ืืงืื ืื ืืื ื ืืฆื.
ืืืืชืื ืชืช ืฉืจืืฆื ืืื ืืช ืกืืืจื-ืืค ืืืืื ืืืืืจ ืืืืืื ืฉื ืืืืกืืจืค ืืืื ืืช ืืืฆืจ ืฉืืืืื ืืจืืฉืื ืื ืฉืื ืืจืฆื ืืฉืื ืขืืื. ืืื ืฉืืืืจื ืืืื ืืืชืจ ืืื ืกืืช ืืฉืืื ืขื ืืืฉืงืืขืื ืืงืืืช ืืืคื ืืืจ ืืืืฆืืื ืื ืืืฉืืื ืืืืืก ืืฉืงืขื ืื ืชืืื ืืฉืคืขื ืืจืืืืช ืขื ืขืชืื ืืคืจืืืงื.
ืืืชื ืืืืช ืืืืืืจืืช ืฉืื ื ืืืฉืคืขืืช ืืชืคืืกืช ืืขืืื ืฉืื ื ืืืืืจ ืืืื ืฉืื ืื ื ืืืฉืืื ืฉืืขืืื ืขืืื. ืืฉืื ืื ื ืืืืืื ืฉ"ืื ืืืจ ืืื ืืืื" ืื ืื ื ื ืืคืฉ ืืช ืืืืื ืื ืืืื ืื ื ืืื ืืชืื ืืจืืื ืฉืืื ืืืืช ืื ืืืจ ืืื ืืืื. ืืฉ ืื ืฉืื ืฉืืืืืื ืืช ืืฉืืื ืืืืช ืืื ืืื ืืชืืืื ืืื ืืจืืืืชื, ืืื ืฉืืื ืืืืืจ ืฉืืื ืื ืืืืืื ืืื ืืื ืื ืืชืืืื ืืื ืืคืฉืจ ืืืชืืืฅ ืืืืืืืฃ.
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.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'?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
ืจืืฆืื ืื ืกืืช ืืคืชืืจ ืืขืื ืฉืคืืช? ืืืื ืืคืืื ืืคืจื? ืืืืื ืื ืืคืชืืจ ืืืคืจืกื ืืชืืืืืช ืืช ืืืืจืกืืืช ืฉืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
