Menu
Coddy logo textTech

קיבולת פרוסה

שיעור 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

אבל הקיבולת נשארת זהה. אז שימו לב: האורך לא תמיד שווה לקיבולת."

challenge icon

אתגר

קל

בקוד הנתון, אנחנו מגדירים פרוסה של 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

תרגלו בעצמכם: קומפיילר Go אונליין