الكتاب الأساسي

التعبيرات والجملات والجملات البسيطة

ستقدّم هذه المقالة التعبيرات والجملات في Go.

ببساطة، يمثّل التعبير قيمة وتمثّل الجملة عملية. لكن في الواقع، قد تتكوّن بعض التعبيرات الخاصة من عدة قيم وتمثّلها، وقد تتكوّن بعض الجمل من عدة عمليات/جمل فرعية. وتبعًا للسياق، يمكن أيضًا النظر إلى بعض الجمل على أنها تعبيرات.

الجملات البسيطة هي بعض الجملات الخاصة. في Go، يجب أن تكون بعض أجزاء جميع أنواع مسارات التحكم جملات بسيطة، ويجب أن تكون بعض الأجزاء تعبيرات. وسيُقدَّم مسار التحكم في مقال Go 101 التالي.

لن تقدّم هذه المقالة تعريفات دقيقة للتعبيرات والجمل. فمن الصعب تحقيق ذلك. سترد هذه المقالة فقط بعض حالات التعبيرات والجمل. لن تُغطّى جميع أنواع التعبيرات والجمل في هذه المقالة، لكن ستُدرج جميع أنواع الجملات البسيطة.

بعض حالات التعبيرات

معظم التعبيرات في Go هي تعبيرات أحادية القيمة. يمثّل كل منها قيمة واحدة. أما التعبيرات الأخرى فتمثّل قيمًا متعددة وتُسمّى تعبيرات متعددة القيم.

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

القيم الحرفية والمتغيرات والثوابت المسمّاة كلها تعبيرات أحادية القيمة، وتُسمّى أيضًا تعبيرات أولية.

العمليات (بدون أجزاء الإسناد) التي تستخدم المعاملات المقدَّمة في مقال المعاملات الشائعة كلها تعبيرات أحادية القيمة.

إذا أرجعت دالة نتيجة واحدة على الأقل، فإن استدعاءاتها (بدون أجزاء الإسناد) تكون تعبيرات. وبوجه خاص، إذا أرجعت دالة أكثر من نتيجة واحدة، فإن استدعاءاتها تُعدّ من التعبيرات متعددة القيم. أما استدعاءات الدوال التي لا تُرجع نتائج فليست تعبيرات.

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

في الواقع، سنتعلّم لاحقًا أن الدوال المخصّصة، بما فيها الطرق، كلها قيم دوال، لذا فهي أيضًا تعبيرات (أحادية القيمة). وسنتعلّم المزيد عن أنواع الدوال وقيمها لاحقًا.

عمليات الاستقبال من القناة (بدون أجزاء الإسناد) هي أيضًا تعبيرات. وستُشرح عمليات القنوات في مقال القنوات في Go لاحقًا.

قد يكون لبعض التعبيرات في Go، بما فيها عمليات الاستقبال من القناة، نتائج اختيارية. ويمكن أن تظهر هذه التعبيرات كتعبيرات أحادية القيمة ومتعددة القيم معًا، وذلك حسب السياقات المختلفة. ويمكننا تعلّم هذه التعبيرات في مقالات Go 101 أخرى لاحقًا.

بعض حالات الجملات البسيطة

هناك ستة أنواع من الجملات البسيطة.

  1. صيغ تعريف المتغيرات القصيرة
  2. إسنادات القيم المحضة (غير الممزوجة بتعريفات المتغيرات)، بما فيها عمليات x op= y.
  3. استدعاءات الدوال/الطرق وعمليات الاستقبال من القناة. وكما ذُكر في القسم السابق، يمكن استخدام هذه الجملات البسيطة أيضًا كتعبيرات.
  4. عمليات الإرسال إلى القناة.
  5. لا شيء (وتُعرف أيضًا بالجملات الفارغة). سنتعلّم بعض استخدامات الجملات الفارغة في المقال التالي.
  6. x++ وx--.

مرة أخرى، ستُقدَّم عمليات الاستقبال والإرسال في القنوات في مقال القنوات في Go.

لاحظ أن x++ وx-- لا يمكن استخدامهما كتعبيرات. كما أن Go لا تدعم صيغتي الصياغة ++x و--x.

بعض حالات الجملات غير البسيطة

قائمة غير كاملة بالجملات غير البسيطة:

  • صيغ تعريف المتغيرات القياسية. نعم، تعريفات المتغيرات القصيرة جملات بسيطة، لكن التعريفات القياسية ليست كذلك.
  • تعريفات الثوابت المسمّاة.
  • تعريفات الأنواع المخصّصة.
  • تعريفات استيراد الحزم.
  • كتل الشيفرة الصريحة. تبدأ كتلة الشيفرة الصريحة بـ { وتنتهي بـ }. وقد تحتوي كتلة الشيفرة على العديد من الجملات الفرعية.
  • تعريفات الدوال. قد يحتوي تعريف الدالة على العديد من الجملات الفرعية.
  • مسارات التحكم وقفزات تنفيذ الشيفرة. يرجى قراءة المقال التالي للتفاصيل.
  • أسطر return في تعريفات الدوال.
  • استدعاءات الدوال المؤجَّلة وإنشاء goroutine. سيُقدَّم الاثنان في المقال الذي يليه.

أمثلة على التعبيرات والجملات


// بعض الجملات غير البسيطة.
import "time"
var a = 123
const B = "Go"
type Choice bool
func f() int {
	for a < 10 {
		break
	}

	// هذه كتلة شيفرة صريحة.
	{
		// ...
	}
	return 567
}

// بعض الجملات البسيطة:
c := make(chan bool) // ستُشرح القنوات لاحقًا
a = 789
a += 5
a = f() // هنا تُستخدم f() كتعبير
a++
a--
c <- true // عملية إرسال إلى قناة
z := <-c  // عملية استقبال من قناة تُستخدم
          // كقيمة مصدر في جملة إسناد.

// بعض التعبيرات:
123
true
B
B + " language"
a - 789
a > 0 // قيمة منطقية غير محدّدة النوع
f     // قيمة دالة من النوع "func ()"

// يمكن استخدام ما يلي كليهما
// كجملات بسيطة وتعبيرات.
f()
<-c // عملية استقبال من قناة