Menu
flag Ar iconالعربيةdown icon
جرّب في Playground

الأنواع الأوّلية في Zero: أعداد صحيحة وكسور عشرية وBool وString وVoid

الأنواع المضمَّنة التي تُعطيك إيّاها Zero جاهزة: أعداد صحيحة بإشارة وبدون إشارة بكل عرض، وكسور عشرية، وقيم منطقية، ومحارف، ونصوص، والنوع الفارغ Void.

الأنواع المضمَّنة

تُعطيك Zero مجموعة صغيرة منتظمة من الأنواع الأوّلية. لا شيء غريب، لا شيء مفاجئ — فقط الأنواع التي يحتاجها كل لغة أنظمة، مُسمَّاة باتّساق.

العائلةالأنواعملاحظات
أعداد صحيحة بإشارةi8، i16، i32، i64تمثيل المتمّم الثنائي.
أعداد صحيحة بدون إشارةu8، u16، u32، u64الصفر والقيم الموجبة فقط.
بحجم المؤشِّرusize، isizeالعرض يطابق مؤشِّر المنصّة.
كسور عشريةf32، f64IEEE-754.
منطقيbooltrue أو false.
محرفcharقيمة قياسية واحدة من Unicode.
نصّStringنصّ UTF-8.
فارغVoid"لا قيمة مفيدة."

هذه القائمة الكاملة للأنواع الأوّلية التي ستلمسها يوميًا. الأنواع المُركّبة — shape، وenum، وchoice — مبنية من هذه.

الأعداد الصحيحة

تتّبع أنواع الأعداد الصحيحة نمط تسمية موحّدًا: i للأعداد ذات الإشارة، وu لغير المُشارة، يتبعها عدد البتات. فـ i32 عدد صحيح بإشارة 32 بت؛ وu8 بايت بدون إشارة؛ وi64 عدد صحيح بإشارة 64 بت.

let small_signed: i8   = -120
let byte:         u8   = 250
let id:           i32  = 1
let big:          i64  = 9_000_000_000
let index:        usize = 0

النوع الافتراضي للقيمة الحرفية بلا لاحقة هو i32 ما لم يفرض السياق المحيط شيئًا آخر:

let answer = 42       // i32

عندما تحتاج عرضًا محدّدًا، أرفق لاحقة بالقيمة الحرفية أو علّق الربط:

let byte = 250_u8     // قيمة حرفية معلَّمة بالنوع
let byte: u8 = 250    // ربط معلَّم بالنوع

يُنتج كلا الشكلين القيمة نفسها. شكل لاحقة القيمة الحرفية مفيد عندما تمرّر قيمة حرفية مباشرة إلى دالة أو تبني بنية:

let pair: BytePair = Pair { left: 1_u8, right: 2_u8 }

متى تختار أيّ عرض

قاعدة عامة قصيرة:

  • i32 لمعظم الحسابات ذات الإشارة. واسع بما يكفي لأي شيء تعدّه تقريبًا، وسريع على كل منصّة.
  • u8 للعمل على مستوى البايت. بايتات من ملف، بايتات في مخزن، بايتات عبر الشبكة.
  • u32 / u64 للأعداد غير السالبة عندما يهمّ المدى. إزاحات ملف أكبر من 2 جيجابايت، أعداد كبيرة.
  • usize للأحجام والفهارس. بحجم المؤشِّر — يطابق ما تستخدمه المنصّة لعنونة الذاكرة.
  • i64 للوقت منذ الحقبة (Unix epoch) وما يشبهه. كبير بما يكفي لنانوثوانٍ تمتدّ مئات السنين.

اختيار أصغر نوع يناسب الحالة ممارسة جيّدة؛ واختيار نوع صغير جدًا والفيض أكبر بكثير من اختيار نوع أعرض بقليل.

القيم المنطقية

let ok = true
let done: bool = false

bool له قيمتان فقط: true وfalse. هما قيم حرفية، لا ثوابت تستوردها من مكان ما. الشرط في if أو while من النوع bool — لا يوجد تحويل ضمني لقيم الصدق من الأعداد الصحيحة أو النصوص.

if ok {
    check world.out.write("yes\n")
} else {
    check world.out.write("no\n")
}

If/else يغطّي الشروط بالتفصيل.

الكسور العشرية

f32 وf64 أعداد كسرية بتمثيل IEEE-754 بحجم 32 بت و64 بت على التوالي. استخدمها عندما تحتاج قيمًا كسرية — قياسات، نسب، هندسة. للحساب الدقيق على العملات، فضّل الأعداد الصحيحة بالوحدة الأصغر (سنتات، ساتوشي) على الكسور العشرية.

let ratio: f32 = 0.5
let pi:    f64 = 3.141592653589793

f64 هو الافتراضي للقيم الكسرية الحرفية بلا لاحقة.

المحارف والنصوص

char يحمل قيمة قياسية واحدة من Unicode:

let initial: char = 'Z'

String سلسلة من المحارف، مُرمَّزة عادة بـ UTF-8 من المكتبة القياسية. القيم النصّية الحرفية تستخدم علامات اقتباس مزدوجة:

let message: String = "hello from zero\n"

تسلسلات الإفلات التي تتوقّعها تعمل — \n لسطر جديد، و\t لجدولة، و\\ للشَّرطة المائلة العكسية الحرفية، و\" لعلامة اقتباس مزدوجة حرفية.

let multi_line = "line one\nline two\n"

تكشف المكتبة القياسية عن عروض بايتية للنصّ للعمل منخفض المستوى. الشكل std.mem.span("zero") يُعيد Span<u8> على البايتات — مفيد عندما تُحلّل أو تحسب تجزئة أو تُقارن بايتيًا.

Void

Void هو نوع "لا قيمة مفيدة للإرجاع" في Zero. الدوال الموجودة لتأثيراتها الجانبية تستخدمه:

pub fun main(world: World) -> Void raises {
    check world.out.write("hello\n")
}

main تكتب شيئًا وتعود. لا توجد قيمة لتُسلَّم، لذا النوع Void. سترى Void على معظم الدوال التي تمسّ World — هي مختارة لتأثيرها، لا لنتيجتها.

الشَّرطات السفلية في القيم العددية الحرفية

القيم العددية الحرفية الطويلة تستطيع استخدام شَرطات سفلية كفواصل بصرية. يتجاهلها المترجم، فهي ميزة لقراءة أسهل فقط:

let big   = 9_000_000_000_i64
let bytes = 1_048_576_u32     // 1 ميبيبايت

استخدمها أينما أصبحت الأرقام صعبة العدّ.

ورقة سريعة للواحق القيم الحرفية المعلَّمة

اللاحقةالنوعمثال
_i8 / _i16 / _i32 / _i64عدد صحيح بإشارة127_i8
_u8 / _u16 / _u32 / _u64عدد صحيح بدون إشارة255_u8
_usize / _isizeبحجم المؤشِّر0_usize
_f32 / _f64كسر عشري0.5_f32

استخدمها عندما تبني قيمة لا يُثبّت السياق المحيط نوعها.

التالي: الدوال

الأنواع الأوّلية بلا فائدة دون شيء تعمله بها. التوثيق التالي يُغطّي الدوال في Zero — كيف تُعلنها، وكيف تُعيد منها قيمًا، وكيف تجمعها لبناء برامج حقيقية.

الأسئلة الشائعة

ما الأنواع الأوّلية التي توفّرها Zero؟

تأتي Zero مع أعداد صحيحة بإشارة بأحجام محدّدة i8 وi16 وi32 وi64؛ وأعداد بدون إشارة u8 وu16 وu32 وu64؛ وأعداد بحجم المؤشِّر usize وisize؛ وكسور عشرية f32 وf64؛ وbool؛ وchar؛ وString؛ وVoid للدوال التي لا تُعيد قيمة مفيدة.

ما النوع الافتراضي للأعداد الصحيحة في Zero؟

القيمة الحرفية الصحيحة بلا لاحقة مثل 42 تأخذ النوع i32 افتراضيًا ما لم يفرض السياق نوعًا مختلفًا. لاستخدام عرض محدّد، اكتب القيمة الحرفية بلاحقة مثل 42_u8 أو 42_i64، أو علّق نوع الربط صراحة بـ let count: u8 = 42.

هل لدى Zero نوع نصّ منفصل؟

نعم. القيم النصّية الحرفية مثل "hello" لها نوع نصّي مضمَّن تُعامله المكتبة القياسية كسلسلة من البايتات (غالبًا بترميز UTF-8). للعمل على مستوى البايت، تكشف المكتبة القياسية عن Span وأدوات عمل بايتية؛ وللعمل على مستوى المحرف يوجد char للقيم المفردة.

ماذا تعني Void في Zero؟

Void هو نوع إرجاع الدالة التي لا تُنتج قيمة مفيدة — هي موجودة فقط لتأثيراتها الجانبية. التوقيع المعتاد pub fun main(world: World) -> Void raises يستخدم Void لأن main موجودة لتنفيذ إدخال/إخراج والخروج، لا لإنتاج قيمة.

ما الفرق بين i32 وu32 في Zero؟

i32 عدد صحيح بإشارة 32 بت يتراوح من −2,147,483,648 إلى 2,147,483,647. أما u32 فبدون إشارة ويتراوح من 0 إلى 4,294,967,295. استخدم الأنواع ذات الإشارة عندما تكون القيم السالبة ذات معنى، وغير المُشارة عندما تكون القيم السالبة خطأً — للأعداد والفهارس والأحجام وما إلى ذلك.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن