mIRC Script

mIRC if, elseif ve else: Koşullu Kod Yazmak

· Güncelleme: · 6 dk okuma

mIRC if, elseif ve else: Koşullu Kod Yazmak
İçindekiler
  1. Temel Yapı
  2. Karşılaştırma Operatörleri
  3. IRC'ye Özgü Operatörler
  4. Çoklu Koşullar
  5. Varlık Kontrolleri
  6. $iif: Tek Satırlık Koşul
  7. Koşullarda Sık Yapılan Hatalar
  8. Koşulları Okunabilir Tutmak
  9. Gerçek Bir Senaryo
  10. Koşulları Test Etmek
  11. Koşullarda Kullanıcı Girdisi
  12. Sonuç

Her script, er ya da geç karar vermek zorunda kalır: Bu kişi op mu? Mesaj boş mu? Sayı beşten büyük mü? Bu kanal benim izlediğim kanallardan biri mi? mIRC if else yapıları, scriptinizin duruma göre farklı davranmasını sağlar. Bu rehberde koşullu kod yazmanın bütün temel araçlarını anlatıyoruz.

Temel Yapı

if (koşul) {
  komutlar
}
elseif (başka koşul) {
  komutlar
}
else {
  komutlar
}

Örnek:

alias kontrol {
  if ($1 == $null) {
    echo -a Parametre vermediniz.
  }
  elseif ($1 isop $chan) {
    echo -a $1 bu kanalda op.
  }
  else {
    echo -a $1 bu kanalda op degil.
  }
}

Süslü parantezlerin yerleşimi mIRC'te katıdır: Açılış parantezi koşulla aynı satırda, kapanış parantezi kendi satırında olmalıdır. elseif ve else ise önceki bloğun kapanış parantezinden sonraki satırda yer alır. Bu kurala uymamak, mIRC scripting'te en sık görülen söz dizimi hatasıdır.

Karşılaştırma Operatörleri

OperatörAnlamı
==Eşit (büyük-küçük harf duyarsız)
===Tam eşit (büyük-küçük harf duyarlı)
!=Eşit değil
< >Küçük, büyük
<= >=Küçük eşit, büyük eşit
isinMetin, diğer metnin içinde geçiyor
iswmJoker karakterli kalıpla eşleşiyor
isnumSayı mı (aralık da belirtilebilir)
isletterHarf mi

Örnekler:

if (merhaba isin $1-) { echo -a Selam verildi. }
if ($1 iswm *@ornek.com) { echo -a Ornek alan adindan. }
if ($1 isnum 1-100) { echo -a Gecerli bir sayi. }

isin ve iswm operatörlerinin yön farkına dikkat edin: isin soldaki metnin sağdakinin içinde olup olmadığına, iswm ise soldaki değerin sağdaki kalıpla eşleşip eşleşmediğine bakar. Bu karışıklık, yeni başlayanların sıkça düştüğü bir tuzaktır.

IRC'ye Özgü Operatörler

mIRC, IRC'ye özel durumları kontrol etmek için kullanışlı operatörler sunar:

OperatörNe kontrol eder?
isopKullanıcı belirtilen kanalda op mu
isvoiceVoice sahibi mi
ishopYarı op mu
isregYetkisiz sıradan kullanıcı mı
isonKullanıcı kanalda mı
isinMetin içinde mi
ischanBelirtilen ad bir kanal mı ve içinde misiniz
if ($nick isop $chan) { ... }
if (Ayse ison #kanal) { ... }
if (#kanal ischan) { ... }

Bu operatörler, yetki kontrolünün en doğal yoludur. Bir komutu yalnızca op'ların kullanmasını istiyorsanız isop kontrolü yeterlidir. Remote eventlerde yetki kontrolü için mIRC remote eventler yazımıza bakın.

Çoklu Koşullar

if (($nick isop $chan) && ($1 != $null)) {
  echo -a Hem op hem parametre var.
}

if (($1 == evet) || ($1 == tamam)) {
  echo -a Onaylandi.
}

&& "ve", || ise "veya" anlamına gelir. Her koşulu kendi parantezi içine almak, mIRC'te zorunlu olmasa bile kodun doğru yorumlanması için güçlü bir öneridir. Karmaşık koşullarda parantezlerin doğru yerleşimi, hatalı mantık kurgularının en sık nedenidir.

Olumsuzlama için ünlem işareti kullanılır:

if (!$istok(%liste,$nick,32)) { echo -a Listede yok. }

Varlık Kontrolleri

mIRC'te bir değerin boş olup olmadığını kontrol etmek sık gereken bir iştir:

if ($1) { echo -a Parametre var. }
if (!$1) { echo -a Parametre yok. }
if ($1 == $null) { echo -a Parametre bos. }

Bu üç yazım çoğu durumda aynı sonucu verir, ancak değer sıfır olduğunda farklılık doğabilir: Sıfır, bazı bağlamlarda "yanlış" olarak değerlendirilir. Sayısal değerlerle çalışırken açıkça $null karşılaştırması yapmak daha güvenlidir.

Dosya ve değişken varlığı için de kontroller bulunur:

if ($exists(veri.txt)) { ... }
if (%ayar) { ... }
if ($hget(tablo)) { ... }

$iif: Tek Satırlık Koşul

Bazen tam bir if bloğu yazmak gereksiz uzun olur. $iif identifier'ı, koşullu bir değeri tek satırda döndürür:

echo -a Durum: $iif($nick isop $chan,Operator,Kullanici)

Üçüncü parametre isteğe bağlıdır; verilmezse koşul yanlış olduğunda boş değer döner. $iif, özellikle popup menülerinde ve mesaj metinleri oluştururken çok kullanışlıdır. Popup menülerinde koşullu öğeler için mIRC popup menüleri yazımıza bakın.

Koşullarda Sık Yapılan Hatalar

  • Tek eşittir kullanmak: Karşılaştırmada iki eşittir gerekir; tek eşittir beklenmedik davranışa yol açabilir.
  • Parantez yerleşimi: Açılış parantezinin ayrı satıra yazılması söz dizimi hatasıdır.
  • isin yönünü karıştırmak: Hangi metnin hangisinin içinde arandığını ters yazmak.
  • Çoklu koşullarda parantez eksiği: Her alt koşulu kendi parantezinde yazmamak.
  • Büyük-küçük harf beklentisi: == harf duyarsızdır; duyarlı karşılaştırma gerektiğinde === kullanılmalıdır.
  • Boşluk eksikliği: Operatörlerin etrafında boşluk bırakmamak bazı durumlarda sorun yaratır.

Koşulları Okunabilir Tutmak

Çok karmaşık koşullar kodu okunamaz hâle getirir. Üç dörtten fazla alt koşul içeren bir ifade yazmak zorunda kaldığınızda, bunu birkaç adıma bölmek genellikle daha iyidir: Önce bir yerel değişkene ara sonucu atayın, sonra onu kontrol edin. Bu yaklaşım hem okunabilirliği artırır hem de hata ayıklamayı kolaylaştırır, çünkü hangi koşulun sağlanmadığını ara değişkeni yazdırarak görebilirsiniz.

Erken çıkış da okunabilirliği artıran bir tekniktir: Kodun başında geçersiz durumları kontrol edip return ile çıkmak, kodun geri kalanını iç içe geçmiş bloklardan kurtarır.

alias islem {
  if (!$1) { echo -a Parametre gerekli | return }
  if (!$chan) { echo -a Kanal penceresinde kullanin | return }
  ; buradan sonrası normal akış
  echo -a Islem yapiliyor...
}

Dikey çizgi karakteri, aynı satırda birden fazla komut yazmanızı sağlar.

Gerçek Bir Senaryo

Bir kanal moderatörü, kullanıcıların kanala gönderdiği bağlantıları filtreleyen bir script yazıyor. İlk sürümde tek bir koşul var: Mesajda "http" geçiyorsa uyarı ver. Kısa sürede fark ediyor ki bu koşul çok kaba: Op'lar ve güvenilir kullanıcılar da uyarı alıyor, ayrıca kanalın kendi web sitesinin bağlantısı da engelleniyor. Koşulu kademeli hâle getiriyor: Önce kişinin op veya voice olup olmadığını kontrol ediyor, sonra bağlantının izinli alan adları listesinde olup olmadığına bakıyor, ancak bu iki kontrolden de geçmezse uyarı veriyor. Erken çıkış tekniğiyle yazdığı kod, iç içe üç blok yerine üç basit kontrol satırından oluşuyor.

Koşulları Test Etmek

Bir koşulun beklediğiniz gibi çalışıp çalışmadığını anlamanın en hızlı yolu, onu komut satırında denemektir. İki eğik çizgiyle başlayan bir satır yazdığınızda mIRC identifier'ları değerlendirip sonucu gösterir; böylece bir karşılaştırmanın doğru mu yanlış mı döndüğünü anında görebilirsiniz. Karmaşık bir koşul yazmadan önce parçalarını tek tek bu şekilde test etmek, saatlerce hata aramaktan kurtarır.

Bir diğer pratik yöntem, koşulun içine geçici bir yazdırma satırı eklemektir. Kodun hangi dala girdiğini görmek, mantık hatalarını bulmanın en doğrudan yoludur. Hata ayıklama teknikleri için ilgili rehberimize bakabilirsiniz.

Koşullarda Kullanıcı Girdisi

Kullanıcıdan gelen metni bir koşulda kullanırken, metnin beklenmedik karakterler içerebileceğini hesaba katın. Boşluk içeren bir girdi, tek bir değer beklediğiniz yerde birden fazla parçaya bölünebilir. Sayı beklediğiniz yere metin gelebilir ve karşılaştırma şaşırtıcı sonuçlar verebilir. Bu yüzden kullanıcı girdisini önce türüne göre kontrol etmek, sonra asıl işlemi yapmak sağlam bir alışkanlıktır.

Özellikle sayısal karşılaştırmalarda girdinin gerçekten sayı olduğunu doğrulamak önemlidir. Aksi hâlde script sessizce yanlış dalı seçebilir ve bunun farkına çok sonra varırsınız.

Sonuç

Koşullu yapılar, scriptinize karar verme yeteneği kazandırır. Parantez yerleşimine dikkat edin, karşılaştırma operatörlerini doğru seçin, IRC'ye özgü operatörlerden yararlanın, çoklu koşullarda her alt koşulu parantezleyin ve karmaşık koşulları adımlara bölün. Tekrarlayan işler için sıradaki rehberimiz mIRC while döngüsü.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

mIRC'te eşitlik kontrolü nasıl yapılır?

İki eşittir işareti kullanılır. Büyük-küçük harf duyarlı karşılaştırma için farklı bir operatör gerekir.

isop operatörü ne işe yarar?

Bir kullanıcının belirtilen kanalda op olup olmadığını kontrol eder. Benzer şekilde isvoice ve ison operatörleri de bulunur.

$iif ne zaman kullanılmalı?

Tek satırda koşullu bir değer döndürmek gerektiğinde, örneğin bir menü öğesinin metnini belirlerken kullanışlıdır.