R Academy · درس

أولوية العوامل والتعبيرات المعقدة

افهم ترتيب التقييم واكتب تعبيرات معقدة بأمان.

الدرس 4 من 413 خطوة

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

ما أسبقية العوامل؟

تحدد أسبقية العوامل ترتيب تقييم العمليات في التعبير. وكما في الرياضيات، يُقيَّم الضرب قبل الجمع. ويتبع R جدول أسبقية محددًا جيدًا.

# Precedence in action
result1 <- 2 + 3 * 4    # * before +
result2 <- (2 + 3) * 4  # parentheses override
cat('2 + 3 * 4 =', result1, '
')   # 14
cat('(2+3) * 4 =', result2, '
')   # 20

جدول أسبقية R (من الأعلى إلى الأدنى)

يقيّم R العوامل بهذا الترتيب (الأولوية الأعلى أولًا):

  1. ^ — الأس
  2. - (أحادي) — النفي
  3. : — المتتالية
  4. %%, %/%, %*%, %in% — عوامل خاصة بينية الصياغة
  5. *, / — الضرب والقسمة
  6. +, - (ثنائي) — الجمع والطرح
  7. <, >, <=, >=, ==, != — المقارنة
  8. ! — NOT
  9. &, && — AND
  10. |, || — OR
  11. <-, = — الإسناد
# Exponentiation before multiplication
cat('2 * 3 ^ 2 =', 2 * 3 ^ 2, '
')   # 2 * 9 = 18
cat('(2*3)^2 =', (2 * 3) ^ 2, '
')   # 6^2 = 36

# Unary minus applied after exponentiation
cat('-2 ^ 2 =', -2 ^ 2, '
')    # -(2^2) = -4
cat('(-2)^2 =', (-2) ^ 2, '
')  # 4

أسبقية عامل النقطتين

يتمتع عامل المتتالية : بأسبقية أعلى من + و-، مما يسبب خطأً شائعًا لدى المبتدئين: تُقرأ 1:n+1 على أنها (1:n)+1، وليس 1:(n+1).

n <- 5

# Common mistake: colon before addition
cat('1:n+1 =', 1:n + 1, '
')   # (1:5)+1 = 2 3 4 5 6
cat('1:(n+1) =', 1:(n + 1), '
') # 1:6 = 1 2 3 4 5 6

# These are DIFFERENT results!
# Always use parentheses when the upper bound involves arithmetic

أسبقية العوامل الخاصة

تتمتع العوامل الخاصة مثل %% و%/% و%in% بأسبقية أعلى من + و-، لكنها أدنى من ^. ويؤدي سوء فهم ذلك إلى أخطاء دقيقة.

# %% has higher precedence than +
cat('10 + 7 %% 3 =', 10 + 7 %% 3, '
')   # 10 + (7%%3) = 10+1 = 11
cat('(10+7) %% 3 =', (10 + 7) %% 3, '
') # 17 %% 3 = 2

# %in% precedence
nums <- 1:5
cat('1 + 1 %in% nums =', 1 + 1 %in% nums, '
')  # (1+1) %in% nums? No! 1 + (1 %in% nums) = 2

المقارنة قبل العمليات المنطقية

تُقيَّم عوامل المقارنة (< و> و== وغيرها) قبل العوامل المنطقية (! و& و|). لذلك يعمل x > 0 & y < 10 كما هو متوقع دون أقواس إضافية.

x <- 5
y <- 8

# This works as intended: comparisons first, then &
cat('x > 0 & y < 10:', x > 0 & y < 10, '
')  # TRUE & TRUE = TRUE

# ! NOT has higher precedence than &
vec <- c(TRUE, FALSE, TRUE)
cat('!vec & TRUE:', !vec & TRUE, '
')  # (!vec) & TRUE, not !(vec & TRUE)
cat('!(vec & TRUE):', !(vec & TRUE), '
')

خطأ أسبقية مربك رقم 1

من الأخطاء الشائعة نسيان أن ! أقل أسبقية من المقارنة، ولذلك تُقرأ !x == y على أنها (!x) == y، وليس !(x == y).

x <- 5
y <- 5

# BUG: meant to check 'x is not equal to y'
bug_result <- !x == y      # reads as (!x) == y
cat('!x == y (bug):', bug_result, '
')   # !5 means FALSE, FALSE==5 is FALSE

# CORRECT: use != or !(x == y)
cat('x != y:', x != y, '
')             # FALSE (correct)
cat('!(x == y):', !(x == y), '
')       # FALSE (correct)

خطأ أسبقية مربك رقم 2

هناك خطأ دقيق آخر: تنشئ -1:5 المتتالية -1, 0, 1, 2, 3, 4, 5 — إذ تنطبق إشارة السالب الأحادية على 1 فقط، لا على النطاق بأكمله. ولإنشاء نطاق يبدأ من قيمة سالبة، استخدم الأقواس.

# Misleading: looks like range from -1 to 5 starting at negative
seq1 <- -1:5
cat('-1:5 =', seq1, '
')  # -1 0 1 2 3 4 5 (correct here)

# But -2^2 is a trap:
cat('-2^2 =', -2 ^ 2, '
')    # -4 (not 4)
cat('(-2)^2 =', (-2) ^ 2, '
') # 4

# Always parenthesise to be safe
cat('(-1):5 =', (-1):5, '
')   # same as -1:5 but explicit

استخدام الأقواس من أجل الوضوح

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

# Hard to read — requires knowing precedence
result_unclear <- 2 + 3 * 4 ^ 2 / 8 - 1

# Clear intent with parentheses
result_clear <- 2 + ((3 * (4 ^ 2)) / 8) - 1

cat('Unclear:', result_unclear, '
')
cat('Clear:  ', result_clear, '
')
cat('Same result?', result_unclear == result_clear, '
')

الإسناد في التعبيرات

تتمتع عملية الإسناد (<-) بأسبقية منخفضة جدًا — أدنى من معظم العوامل. وهذا يعني أنه يمكنك إسناد ناتج أي تعبير معقد في سطر واحد، لكنه يعني أيضًا أن الإسناد داخل التعبيرات قد يتصرف على نحو غير متوقع.

# <- has very low precedence
# This assigns (3 + 4) to x, then evaluates (TRUE)
result <- x <- 3 + 4   # x gets 7, result gets 7
cat('x:', x, 'result:', result, '
')

# Be careful with == vs <- 
# x <- 5 is assignment
# x == 5 is comparison (always use == for testing)

تطبيق عملي: تجنب أخطاء الأسبقية

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

# Complex formula: compound interest
principal <- 1000
rate <- 0.05
years <- 10

# Hard to verify in one line
bad <- principal * (1 + rate) ^ years

# Easier to verify step by step
growth_factor <- (1 + rate) ^ years
final_amount <- principal * growth_factor
cat('Growth factor:', round(growth_factor, 4), '
')
cat('Final amount: $', round(final_amount, 2), '
')

الأسبقية مع AND/OR المنطقيتين

تتمتع & (AND) بأسبقية أعلى من | (OR). لذلك يُقيَّم A | B & C على أنه A | (B & C). استخدم الأقواس دائمًا عند الجمع بين AND وOR لتجنب أخطاء منطقية دقيقة.

A <- TRUE
B <- FALSE
C <- TRUE

# & before | — may surprise you
cat('A | B & C:', A | B & C, '
')     # A | (B & C) = TRUE | FALSE = TRUE
cat('(A|B) & C:', (A | B) & C, '
')   # TRUE & TRUE = TRUE

# Different with:
A2 <- FALSE
cat('A2 | B & C:', A2 | B & C, '
')   # FALSE | (FALSE & TRUE) = FALSE
cat('(A2|B) & C:', (A2 | B) & C, '
') # (FALSE|FALSE) & TRUE = FALSE

تحقق سريع

إلى ماذا تُقيَّم -3 ^ 2 في R؟

مراجعة: أسبقية العوامل

ممتاز! إليك أهم النقاط المستخلصة من هذا الدرس:

  • ترتيب الأسبقية (من الأعلى إلى الأدنى): ^، و- الأحادية، و:، و%%/%/%*%%in%، و*/، و+-، والمقارنات، و!، و&، و|، والإسناد
  • -2^2 = -4 لأن ^ تسبق السالب الأحادي — استخدم (-2)^2 للحصول على 4
  • تعني 1:n+1 ‏(1:n)+1 — استخدم 1:(n+1) إذا أردت نطاقًا أطول
  • يرتبط & بإحكام أكبر من | — ضع الأقواس حول المنطق الذي يجمع AND وOR
  • عند الشك، استخدم الأقواس لتوضيح قصدك وتجنب الأخطاء
# Golden rule: parentheses for clarity
n <- 4
# Intended: sequence 1 to n+1
cat('Wrong : 1:n+1  =', 1:n + 1, '
')
cat('Correct: 1:(n+1)=', 1:(n + 1), '
')

# Intended: -(2^2)
cat('Correct: -2^2 = -(2^2) =', -2 ^ 2, '
')
البدء مجانًا

تعلم R مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
43
الدروس
159

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

هل درس «أولوية العوامل والتعبيرات المعقدة» مجاني؟

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

ماذا ستتعلم في «أولوية العوامل والتعبيرات المعقدة»؟

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

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

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

كم من الوقت يستغرق درس «أولوية العوامل والتعبيرات المعقدة»؟

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

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

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

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

  1. عوامل الحساب والمقارنة
  2. العوامل المنطقية والمنطق البولياني
  3. عوامل الإسناد والعوامل الخاصة
  4. أولوية العوامل والتعبيرات المعقدة
← العودة إلى R Academy