0Pricing
Go Academy · درس

Runes مقابل Bytes

افهم البنية الداخلية لسلاسل Go النصية

Runes مقابل Bytes درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما السلسلة النصية في Go؟

السلسلة النصية string في Go هي تسلسل غير قابل للتغيير من البايتات. وتحمل هذه البايتات عادةً نصًا بترميز UTF-8، لكن Go لا يفرض ذلك مطلقًا.

  • لا يمكنك تغيير السلسلة النصية في مكانها.
  • تحسب len عدد البايتات، لا عدد الأحرف.
package main

import "fmt"

func main() {
    s := "Go"
    fmt.Println(s)
    fmt.Println(len(s))
}

البايتات خلف الكواليس

تعيد فهرسة سلسلة نصية باستخدام s[i] بايتًا واحدًا (من النوع byte، وهو اسم مستعار للنوع uint8).

في النصوص المكتوبة بحروف ASCII العادية، يشغل كل حرف بايتًا واحدًا بالضبط.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(s[0])
    fmt.Println(s[1])
    fmt.Println(s[2])
}

البايت عدد

بما أن البايت ليس سوى عدد، فإن طباعة s[0] تعرض 65، وهو رمز ASCII للحرف A، بدلًا من عرض الحرف نفسه.

ولعرض الحرف، حوّل البايت مرة أخرى إلى سلسلة نصية.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(string(s[0]))
}

ما هو rune؟

‏rune هو اسم مستعار للنوع int32، ويمثل نقطة ترميز Unicode واحدة.

  • قد يمتد rune واحد على عدة بايتات عند ترميزه باستخدام UTF-8.
  • استخدم runes عندما تكون مهتمًا بالأحرف، لا بالبايتات الخام.
package main

import "fmt"

func main() {
    var r rune = 'A'
    fmt.Println(r)
    fmt.Println(string(r))
}

الأحرف متعددة البايتات

تحتاج الأحرف غير المكتوبة بـ ASCII إلى أكثر من بايت واحد في UTF-8. فالسلسلة النصية مثل "héllo" تحتوي على بايتات أكثر من عدد حروفها.

لاحظ أن len يعرض عدد البايتات، وهو أكبر من الطول الظاهر.

package main

import "fmt"

func main() {
    s := "héllo"
    fmt.Println(len(s))
}

التكرار على سلسلة نصية

تفكّك حلقة for range على سلسلة نصية ترميز UTF-8 تلقائيًا. وتنتج كل تكرارية:

  • فهرس البايت الذي يبدأ عنده rune،
  • قيمة rune نفسها.
package main

import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Println(i, string(r))
    }
}

عدّ الأحرف بطريقة صحيحة

لعدّ الأحرف بدلًا من البايتات، حوّل السلسلة النصية إلى []rune ثم احسب طولها.

يعطيك ذلك عدد نقاط الترميز.

package main

import "fmt"

func main() {
    s := "héllo"
    runes := []rune(s)
    fmt.Println(len(runes))
}

الفهرسة حسب rune

بعد الحصول على []rune، يمكنك فهرسته للحصول على الحرف رقم N بدقة، حتى مع النصوص متعددة البايتات.

package main

import "fmt"

func main() {
    runes := []rune("héllo")
    fmt.Println(string(runes[1]))
}

من السلاسل النصية إلى البايتات والعودة

يمكنك التحويل بحرية بين السلسلة النصية و[]byte.

  • يعطي []byte(s) البايتات الخام.
  • تعيد string(b) بناء النص.
package main

import "fmt"

func main() {
    b := []byte("Go")
    fmt.Println(b)
    fmt.Println(string(b))
}

بناء سلسلة نصية من runes

يمكن تحويل شريحة من runes مرة أخرى إلى سلسلة نصية بالطريقة نفسها. ويكون ذلك مفيدًا بعد تعديل الأحرف بصورة فردية.

package main

import "fmt"

func main() {
    runes := []rune{'G', 'o', '!'}
    fmt.Println(string(runes))
}

ملخص البايتات مقابل runes

نموذج ذهني سريع:

  • byte = بايت خام واحد (uint8)، وتحسب len(s) هذه البايتات.
  • rune = نقطة ترميز Unicode واحدة (int32)، وتنتج range هذه القيم.
  • استخدم []rune عند عدّ الأحرف أو فهرستها.
package main

import "fmt"

func main() {
    s := "café"
    fmt.Println(len(s))
    fmt.Println(len([]rune(s)))
}

تحقق سريع

اختبر فهمك لـ runes والبايتات.

مراجعة: runes مقابل البايتات

تعلّمت أن سلاسل Go النصية هي تسلسلات غير قابلة للتغيير من البايتات، وتكون عادةً بترميز UTF-8.

  • byte هو بايت خام؛ وتحسب len البايتات.
  • rune هو نقطة ترميز Unicode؛ وتفكّك range ترميزها.
  • حوّل باستخدام []byte(s) و[]rune(s) للعمل على المستوى المناسب.
package main

import "fmt"

func main() {
    s := "Go語"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", len([]rune(s)))
}

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

هل درس «Runes مقابل Bytes» مجاني؟

نعم — نص درس «Runes مقابل Bytes» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «Runes مقابل Bytes»؟

افهم البنية الداخلية لسلاسل Go النصية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «Runes مقابل Bytes»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Runes مقابل Bytes
  2. دوال الحزمة strings
  3. strings.Builder
  4. Unicode وutf8
← العودة إلى Go Academy