R Academy · Ders

İşleç Önceliği ve Karmaşık İfadeler

Değerlendirme sırasını anlayın ve karmaşık ifadeleri güvenle yazın.

4. ders / 413 adım

İşleç Önceliği ve Karmaşık İfadeler, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

İşleç Önceliği Nedir?

İşleç önceliği, bir ifadedeki işlemlerin değerlendirilme sırasını belirler. Matematikte olduğu gibi çarpma, toplamadan önce değerlendirilir. R, iyi tanımlanmış bir öncelik tablosunu izler.

# 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 Öncelik Tablosu (Yüksekten Düşüğe)

R, işleçleri şu sırayla değerlendirir (önce en yüksek öncelik):

  1. ^ — üs alma
  2. - (tekli) — negatifini alma
  3. : — dizi
  4. %%, %/%, %*%, %in% — özel infix işleçler
  5. *, / — çarpma, bölme
  6. +, - (ikili) — toplama, çıkarma
  7. <, >, <=, >=, ==, != — karşılaştırma
  8. ! — NOT
  9. &, && — AND
  10. |, || — OR
  11. <-, = — atama
# 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

İki Nokta İşleci Önceliği

: dizi işleci, + ve -'den daha yüksek önceliğe sahiptir. Bu durum, yeni başlayanların sık yaptığı bir hataya yol açar: 1:n+1, 1:(n+1) olarak değil, (1:n)+1 olarak okunur.

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

Özel İşleçlerin Önceliği

%%, %/% ve %in% gibi özel işleçler, + ve -'den daha yüksek; ^'dan ise daha düşük önceliğe sahiptir. Bunu yanlış anlamak, fark edilmesi zor hatalara yol açar.

# %% 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

Önce Karşılaştırma, Sonra Mantık

Karşılaştırma işleçleri (<, >, == vb.), mantıksal işleçlerden (!, &, |) önce değerlendirilir. Bu nedenle x > 0 & y < 10 ifadesi, ek parantezler olmadan beklendiği gibi çalışır.

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), '
')

Zorlayıcı Öncelik Hatası #1

Sık görülen bir hata şudur: ! işlecinin karşılaştırmadan daha düşük önceliğe sahip olduğunu unutmak. Bu nedenle !x == y, !(x == y) olarak değil, (!x) == y olarak okunur.

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)

Zorlayıcı Öncelik Hatası #2

Bir başka fark edilmesi zor hata: -1:5, -1, 0, 1, 2, 3, 4, 5 dizisini oluşturur — tekli eksi yalnızca 1'e uygulanır, aralığın tamamına değil. Negatif bir değerle başlayan aralık elde etmek için parantez kullanın.

# 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

Açıklık için Parantez Kullanma

Parantezler kesin olarak gerekli olmasa bile onları kullanmak kodun okunmasını kolaylaştırır ve hata olasılığını azaltır. Öncelik tablosunun tamamını ezberlemeye güvenmeyin — niyetinizi açıkça ifade etmek için parantez kullanın.

# 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, '
')

İfadelerde Atama

Atama (<-) çok düşük bir önceliğe sahiptir — çoğu işleçten daha düşüktür. Bu, karmaşık herhangi bir ifadenin sonucunu tek satırda atayabileceğiniz anlamına gelir; ancak ifadelerin içindeki atamanın beklenmedik davranabileceği de anlamına gelir.

# <- 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)

Uygulama: Öncelik Hatalarından Kaçınma

Doğru ve karmaşık ifadeler yazmak için pratik bir strateji şudur: uzun ifadeleri adlandırılmış ara adımlara bölün. Her adımı inceleyebileceğiniz için bu yöntem hata ayıklamayı da kolaylaştırır.

# 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), '
')

Mantıksal AND/OR ile Öncelik

& (AND), |'dan (OR) daha yüksek önceliğe sahiptir. Bu nedenle A | B & C, A | (B & C) olarak değerlendirilir. İnce mantık hatalarından kaçınmak için AND ve OR'u birlikte kullanırken her zaman parantez kullanın.

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

Hızlı Kontrol

-3 ^ 2 R'de neye eşit olarak değerlendirilir?

Özet: İşleç Önceliği

Mükemmel! Bu dersten çıkarılacak temel noktalar şunlardır:

  • Öncelik sırası (yüksekten düşüğe): ^, tekli -, :, %%/%/%*%%in%, */, +-, karşılaştırmalar, !, &, |, atama
  • -2^2 = -4 çünkü ^, tekli eksiden önce gelir — 4 elde etmek için (-2)^2 kullanın
  • 1:n+1, (1:n)+1 anlamına gelir — daha uzun bir aralık istiyorsanız 1:(n+1) kullanın
  • &, |'dan daha sıkı bağlanır — AND/OR mantığını birlikte kullanırken parantez ekleyin
  • Emin olmadığınızda niyetinizi açıkça belirtmek ve hatalardan kaçınmak için parantez kullanın
# 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, '
')
Başlamak ücretsiz

Yapay zeka eğitmeniyle R öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
43
Dersler
159

Sıkça Sorulan Sorular

“İşleç Önceliği ve Karmaşık İfadeler” dersi ücretsiz mi?

Evet — “İşleç Önceliği ve Karmaşık İfadeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“İşleç Önceliği ve Karmaşık İfadeler” dersinde ne öğreneceğim?

Değerlendirme sırasını anlayın ve karmaşık ifadeleri güvenle yazın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“İşleç Önceliği ve Karmaşık İfadeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Aritmetik ve Karşılaştırma İşleçleri
  2. Mantıksal İşleçler ve Boolean Mantığı
  3. Atama ve Özel İşleçler
  4. İşleç Önceliği ve Karmaşık İfadeler
← R Academy Sayfasına Dön