דילוג לתוכן המרכזי
מודול 1 · שיעור 2 מתוך 22/14 בקורס~10 min
שיעורי מודול (2/2)

מערכים וטופלים

ב-JavaScript, מערכים יכולים להכיל כל סוג של אלמנטים ויכולים לגדול או להתכווץ באופן דינמי. TypeScript מוסיף בדיקת סוג סטטית כדי להבטיח שהאוספים יישארו הומוגניים או מכבדים מבנה סוג קבוע.


מערכים (אוספים הומוגניים)

ב-TypeScript, יש שתי דרכים שוות להגדיר את הסוג של מערך המכיל אלמנטים מאותו סוג:

  1. שימוש בסוג האלמנט ואחריו סוגריים מרובעים ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. שימוש בסוג הגנרי Array<T>:

    TS
    const numbers: Array<number> = [1, 2, 3];

שני התחבירים תקפים לחלוטין, אבל הראשון (type[]) הוא הסגנון המקובל והנפוץ ביותר. אם תנסה להכניס ערך לא חוקי (למשל numbers.push("hello") במערך number[]), TypeScript יפיק שגיאה בזמן הידור.


Tuples (מערכים באורך קבוע)

טופל הוא סוג מיוחד של מערך בעל מספר קבוע של אלמנטים כאשר לכל אלמנט יש סוג ספציפי מוגדר מראש על סמך מיקומו.

לדוגמה, כדי לאחסן תגובת HTTP המורכבת מקוד סטטוס (מספר) והודעה (מחרוזת):

TS
const response: [number, string] = [200, 'OK'];

במקרה זה:

  • הרכיב הראשון (response[0]) חייב להיות number.
  • הרכיב השני (response[1]) חייב להיות string.
  • יש לאתחל את המערך עם 2 אלמנטים בדיוק.

Tuples לקריאה בלבד (readonly)

פרט חשוב לגבי tuples ב-TypeScript הוא שבזמן ריצה הם מערכי JavaScript רגילים. משמעות הדבר היא ששיטות מוטטיביות כמו .push() או .pop() זמינות מבחינה טכנית ויכולות לשנות את אורך הטפול, תוך עקיפת חלקית של בדיקות סוג.

כדי למנוע התנהגות זו ולאכוף אי-שינוי אמיתי, אנו יכולים להשתמש במשנה readonly:

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!

נסה זאת בעצמך

תרגיל 1: מערך מספרים

פעילות גופנית#ts.m1.l2.e1
ניסיונות: 0טוען...

הכריז על מערך בשם ציונים המכיל רק מספרים ומאוחל עם הערכים 90, 85 ו-95. השתמש בביאור הסוג המפורש עבור המערך. אל תשתמש בשום סוג.

טוען עורך...
הצג רמז

השתמש בתחביר const scores: number[] = ... או מערך<number>.

הפתרון זמין לאחר 3 ניסיונות

תרגיל 2: 3D Coordinate Tuple

פעילות גופנית#ts.m1.l2.e2
ניסיונות: 0טוען...

הכריז על נקודה בשם טופל המייצגת קואורדינטה תלת-ממדית (שלושה מספרים עבור X, Y, Z) ומאוחלת עם הערכים 10, 20, 30. השתמש בביאור סוג מפורש.

טוען עורך...
הצג רמז

סוג הטפול חייב להיות [מספר, מספר, מספר].

הפתרון זמין לאחר 3 ניסיונות

תרגיל 3: מידע מיקום Tuple

פעילות גופנית#ts.m1.l2.e3
ניסיונות: 0טוען...

הכריז על טופל בשם locationInfo המייצג קואורדינטה גיאוגרפית עם שמו. הוא חייב להכיל: קו רוחב (מספר), קו אורך (מספר) ושם העיר (מחרוזת). אתחול אותו עם הערכים 41.9028, 12.4964 ו'רומא'.

טוען עורך...
הצג רמז

השתמש בתחביר כדי להגדיר טופל עם שלושה אלמנטים: [מספר, מספר, מחרוזת].

הפתרון זמין לאחר 3 ניסיונות

תרגיל 4: יומן כניסה Tuple

פעילות גופנית#ts.m1.l2.e4
ניסיונות: 0טוען...

הכריז על טופל בשם logEntry המייצג שורת יומן. הוא חייב להכיל לפי הסדר: חותמת זמן (מספר), רמת חומרה (מחרוזת) והודעת שגיאה (מחרוזת). אתחול אותו עם חותמת זמן 1716300000, רמה 'INFO' וההודעה 'יישום התחיל'.

טוען עורך...
הצג רמז

השתמש בתחביר כדי להגדיר טופלה של שלושה אלמנטים: [מספר, מחרוזת, מחרוזת] והקצה את הערכים שצוינו.

הפתרון זמין לאחר 3 ניסיונות