שיעורי מודול (2/2)
מערכים וטופלים
ב-JavaScript, מערכים יכולים להכיל כל סוג של אלמנטים ויכולים לגדול או להתכווץ באופן דינמי. TypeScript מוסיף בדיקת סוג סטטית כדי להבטיח שהאוספים יישארו הומוגניים או מכבדים מבנה סוג קבוע.
מערכים (אוספים הומוגניים)
ב-TypeScript, יש שתי דרכים שוות להגדיר את הסוג של מערך המכיל אלמנטים מאותו סוג:
-
שימוש בסוג האלמנט ואחריו סוגריים מרובעים (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
שימוש בסוג הגנרי
Array<T>:TSconst numbers: Array<number> = [1, 2, 3];
שני התחבירים תקפים לחלוטין, אבל הראשון (type[]) הוא הסגנון המקובל והנפוץ ביותר. אם תנסה להכניס ערך לא חוקי (למשל numbers.push("hello") במערך number[]), TypeScript יפיק שגיאה בזמן הידור.
Tuples (מערכים באורך קבוע)
טופל הוא סוג מיוחד של מערך בעל מספר קבוע של אלמנטים כאשר לכל אלמנט יש סוג ספציפי מוגדר מראש על סמך מיקומו.
לדוגמה, כדי לאחסן תגובת HTTP המורכבת מקוד סטטוס (מספר) והודעה (מחרוזת):
const response: [number, string] = [200, 'OK'];במקרה זה:
- הרכיב הראשון (
response[0]) חייב להיותnumber. - הרכיב השני (
response[1]) חייב להיותstring. - יש לאתחל את המערך עם 2 אלמנטים בדיוק.
Tuples לקריאה בלבד (readonly)
פרט חשוב לגבי tuples ב-TypeScript הוא שבזמן ריצה הם מערכי JavaScript רגילים. משמעות הדבר היא ששיטות מוטטיביות כמו .push() או .pop() זמינות מבחינה טכנית ויכולות לשנות את אורך הטפול, תוך עקיפת חלקית של בדיקות סוג.
כדי למנוע התנהגות זו ולאכוף אי-שינוי אמיתי, אנו יכולים להשתמש במשנה readonly:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!נסה זאת בעצמך
תרגיל 1: מערך מספרים
הכריז על מערך בשם ציונים המכיל רק מספרים ומאוחל עם הערכים 90, 85 ו-95. השתמש בביאור הסוג המפורש עבור המערך. אל תשתמש בשום סוג.
הצג רמז
השתמש בתחביר const scores: number[] = ... או מערך<number>.
הפתרון זמין לאחר 3 ניסיונות
תרגיל 2: 3D Coordinate Tuple
הכריז על נקודה בשם טופל המייצגת קואורדינטה תלת-ממדית (שלושה מספרים עבור X, Y, Z) ומאוחלת עם הערכים 10, 20, 30. השתמש בביאור סוג מפורש.
הצג רמז
סוג הטפול חייב להיות [מספר, מספר, מספר].
הפתרון זמין לאחר 3 ניסיונות
תרגיל 3: מידע מיקום Tuple
הכריז על טופל בשם locationInfo המייצג קואורדינטה גיאוגרפית עם שמו. הוא חייב להכיל: קו רוחב (מספר), קו אורך (מספר) ושם העיר (מחרוזת). אתחול אותו עם הערכים 41.9028, 12.4964 ו'רומא'.
הצג רמז
השתמש בתחביר כדי להגדיר טופל עם שלושה אלמנטים: [מספר, מספר, מחרוזת].
הפתרון זמין לאחר 3 ניסיונות
תרגיל 4: יומן כניסה Tuple
הכריז על טופל בשם logEntry המייצג שורת יומן. הוא חייב להכיל לפי הסדר: חותמת זמן (מספר), רמת חומרה (מחרוזת) והודעת שגיאה (מחרוזת). אתחול אותו עם חותמת זמן 1716300000, רמה 'INFO' וההודעה 'יישום התחיל'.
הצג רמז
השתמש בתחביר כדי להגדיר טופלה של שלושה אלמנטים: [מספר, מחרוזת, מחרוזת] והקצה את הערכים שצוינו.
הפתרון זמין לאחר 3 ניסיונות