مرکزی مواد پر جائیں
ماڈیول 4 · سبق 1 از 5کورس میں 16/50~8 min
ماڈیول اسباق (1/5)

فکسڈ لمبائی کی صفیں۔

گو میں ایک سری کی ایک مقررہ لمبائی ہوتی ہے، جسے اس کی قسم میں پکایا جاتا ہے: [N]T۔ یہ ایک قدیم ہے جو شاذ و نادر ہی براہ راست ایپلیکیشن کوڈ میں استعمال ہوتا ہے — آپ کریں گے۔ تقریباً ہمیشہ سلائسز (اگلا سبق) کے ساتھ کام کریں، جو متحرک ہیں۔ صفوں پر مناظر۔

پھر بھی، صفوں کو اچھی طرح سمجھنا ضروری ہے: گو میں ہر چیز بنائی گئی ہے۔ ان کے اوپر.

اعلان اور ابتدا

Go
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3}            // inference with :=
c := [3]int{}                   // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4}       // length inferred = 4

ایک صف کی صفر قدر ہر کے ساتھ اعلان کردہ لمبائی کی ایک صف ہے۔ عنصر اپنی صفر قدر پر:

Go
var nums [5]int  // [0 0 0 0 0]

اشاریہ سازی اور len

Go
a := [3]int{10, 20, 30}
fmt.Println(a[0])      // 10
a[1] = 99
fmt.Println(len(a))    // 3

حد سے باہر رسائی رن ٹائم گھبراہٹ کا سبب بنتی ہے (خاموش غیر متعین نہیں۔ جیسے C میں)۔

لمبائی قسم کا حصہ ہے۔

Go
var a [3]int
var b [4]int
// a = b   // ERROR: different types

[3]int اور [4]int مختلف قسمیں ہیں، حالانکہ دونوں ہی رکھتے ہیں int یہی وجہ ہے کہ صفوں کو شاذ و نادر ہی افعال میں منتقل کیا جاتا ہے: آپ کو کرنا پڑے گا۔ پیرامیٹر کی قسم میں لمبائی کو ہارڈ کوڈ کریں۔

قدر کے لحاظ سے کاپی کریں۔

سلائسس (حوالہ) اور نقشے (حوالہ) کے برعکس، صفوں کو ** کے ذریعے کاپی کیا جاتا ہے۔ قدر**:

Go
a := [3]int{1, 2, 3}
b := a               // copy
b[0] = 99
fmt.Println(a[0])    // 1 — a is unchanged

کسی فنکشن کو پاس کرتے وقت بھی یہی لاگو ہوتا ہے: فنکشن اسے وصول کرتا ہے۔ اپنی کاپی.

arrays کب استعمال کریں؟

  • مقررہ سائز کے بفر جو مرتب وقت پر معلوم ہوتے ہیں (جیسے [16]byte MD5 کے لیے)۔
  • جامع نقشہ کی چابیاں (سلائسز "موازنہ" نہیں ہیں، صفیں ہیں)۔
  • انتہائی کارکردگی (کوئی سمت نہیں، کیشے کے موافق)۔

99% کوڈ کے لیے: سلائسیں استعمال کریں۔

اسے آزمائیں

ورزش#go.m4.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

10، 20، 30 اقدار کے ساتھ 3 انٹس کی ایک صف کے طور پر اعلان کریں اور اس کی لمبائی پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

صف کا لغوی: `[3]int{a, b, c}`۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m4.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

بی کو 5 انٹس (تمام صفر) کی صف کے طور پر قرار دیں اور 99 کو پوزیشن 2 پر تفویض کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`var b [5]int` [0 0 0 0 0] سے شروع ہوتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m4.l1.e3
تیار

کیا [3]int اور [4]int ایک ہی قسم ہے؟

Go
var a [3]int
var b [4]int
// a = b ?
جواب کے اختیارات

Recap

  • [N]T: مقررہ لمبائی، قسم کا حصہ۔
  • صفر قدر: ہر عنصر اپنی صفر قدر پر۔
  • [...]int{...} کمپائلر کو لمبائی کا اندازہ لگانے دیتا ہے۔
  • قدر کے لحاظ سے کاپی کریں (اندرونی افعال سمیت)۔
  • حد سے باہر = گھبراہٹ، غیر وضاحتی نہیں۔
  • عملی طور پر، سلائسز کا استعمال کریں، جو صفوں پر آراء ہیں۔