קיבולת פרוסה
שיעור 7 מתוך 21 בקורס פרוסות ומפות ב-GoLang של Coddy.
אחד הדברים שעלולים לבלבל כשעובדים עם פרוסות הוא ההבדל בין האורך לקיבולת. בשיעור הזה נעמיק בהבנת הקיבולת של פרוסה.
ובכן, בואו נתחיל. ההצהרה הזו יוצרת פרוסה חדשה כמו זו:
var names []stringזוהי פרוסה חדשה, ולכן אין לה מערך גיבוי, ובהתאם לכך, כל השדות שלה הם אפס.
כשמשתמשים בפונקציה <strong>len</strong> או בפונקציה <strong>cap</strong> על הפרוסה הזו, שתיהן יחזירו 0. עם זאת, כשמשתמשים במקום זאת בליטרל של פרוסה, Go יוצרת הפעם מערך גיבוי חדש:
names := []string{"Python", "Java", "Rust"}כאן יש שלושה איברים בליטרל האחרון, ולכן גם במערך הגיבוי של הפרוסה <strong>names</strong> יש שלושה איברים. לכן הקיבולת היא האורך של מערך הגיבוי של הפרוסה, ולא האורך של הפרוסה עצמה.
כדי להבין את זה טוב יותר, נבחן דוגמה נוספת:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]אז חשבו על זה: מה תהיה הקיבולת של הפרוסה <strong>nameSlice</strong> בדוגמה הזו?
התשובה היא 4. כאן מתחילים באינדקס 1 וממשיכים עד סוף הפרוסה, ואפשר לבדוק זאת:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))התוצאה תהיה:
[Golang Rust JavaScript Haskell]
4אז זכרו: כדי לספור את הקיבולת, מתחילים מהמיקום הראשון וממשיכים עד סוף הפרוסה.
גם אם נעשה משהו כזה:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:4]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))כאן האורך משתנה, ומקבלים רק <strong>שלושה איברים</strong>:
[Golang Rust JavaScript]
4אבל הקיבולת נשארת זהה. אז שימו לב: האורך לא תמיד שווה לקיבולת."
אתגר
קלבקוד הנתון, אנחנו מגדירים פרוסה של 10 איברים.
- בצעו חיתוך כדי ליצור פרוסה נוספת ולהדפיס את הקיבולת שלה על המסך. היא אמורה להיות שווה ל־6.
נסו בעצמכם
package main
import (
"fmt"
)
func main() {
// פרוסה של 10 איברים
lang := []string{"Python", "Java", "JavaScript", "C++", "Go", "Ruby", "Swift", "Rust", "PHP", "Kotlin"}
// בצעו כאן חיתוך
// השלימו את הפונקציה Print
fmt.Println("the capacity of this Slice is :" ?)
}כל השיעורים ביחידה פרוסות ומפות ב-GoLang
3מה מסתתר מאחורי ה-Slice
Slice הוא מערךיצירת Slice באמצעות makeהעתקת Sliceמחיקת איבראתגר סיכום #1אתגר סיכום #2תרגלו בעצמכם: קומפיילר Go אונליין