İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Ders: Daha İyi Kod Yazmak İçin Öneriler

L4roXyL

0
İyinet Üyesi
Katılım
16 Ekim 2011
Mesajlar
124
Reaction score
2
Ders: Daha iyi kod yazın.
Tarih: 17 Mayıs 2008 Cumartesi
Yazan: L4roXyL - (Hasan AYDENİZ)

-

mIRC'de daha iyi nasıl kod yazılır?
İlk başta mIRC 6.31 yani mIRC'in en güncel sürümündeki, help dosyası en iyi dostunuz ve yardımcınız olsun.
Bunu ciddiyet ile söylüyorum. Gerçekten öğrenmek ve birşeyler yapmak isteyen kişinin en büyük hocasıdır, help dosyası.

-

1- ISWM(iswm) yerine $regex kullanın.
Reg(ular)Ex(pression) mIRC de daha rahat kod yazmanıza yarar. Ve yapı bakımında, çok daha hızlı ve kullanışlıdır.

Örneğin:
//if (*deneme* iswm a1denemeb1) echo - True.
Şeklinde yapacağınız bir işlevi;
//if ($regex(a1denemeb1,deneme)) echo - True.
Şeklinde yapabilirsiniz.


2- $iif identifier'ını çokça kullanın.

Örneğin:
//if (%değişken == 1) echo - True. | else echo - False.
Şeklinde yapacağınız bir işlevi;
//echo - $iif(%değişken == 1,True.,False.)
Şeklinde yapabilirsiniz.
Identifier'ın mantığı; $iif(işlev,doğru,yanlış) şeklindedir.


3- $v1 - $v2 identifier'larını sık sık kullanın.

Örneğin:
//echo - $iif(deneme isin deneme123,$ifmatch)
Şeklinde yapacağınız bir işlevi;
//echo - $iif(deneme isin deneme123,$v1)
Şeklinde yapabilirsiniz.
Her ikisindede, "deneme" yanıtını alıcaksınız.
//echo - $iif(deneme isin deneme123,Arananılan: $v2 - Bulunan: $v1)
Yani gördüğünüz gibi, $v2 identifier'ı sorgulanan hakkındada bilgi verecektir.
Not: mIRC 6.21 ve üst versionlarda geçerlidir.


4- $+() kullanın.

Örneğin:
//echo - deneme $+ .deneme2 >= deneme.deneme2
Şeklinde yapacağınız bir işlevi;
//echo - $+(deneme,.deneme2) >= deneme.deneme2
Şeklinde yapabilirsiniz.


5- Kopyaladığınız yada kestiğiniz yazıları paste etmeden görebileciğinizi hatta uzunluğunu dahi bilebileceğinizi biliyormusunuz?
Bakınız: $cb() - Clipboard

//echo - $cb(0) => Son kopyaladığınız satır miktarını verir.
//echo - $cb(1) => 1. satırdaki veriyi verir.
//echo - $cb(3).len => 3. satırdaki verinin harf miktarını verir. ($len)
Peki, mouse kullanmadan kopyalama işlevini yapmayı biliyormusunuz?
Bakınız: /clipboard [-an] <text>
-n: Kopyaladığınız text'in başına bir satır boşluk koyar. ($crlf)


6- /filter komutuna uzak kaldığınızı çok iyi biliyorum. Ama kalmayın.

/filter ile yapacağınız basit bir işlevi, /filter kullanmadan mecburen /while yada goto kullanarak yapacağınızı biliyormuydunuz?
Yani anlayacağınız, size çok yabancı gelen /filter komutunu sık sık kullanın.
Örneğin bir deneme.txt dosyasındaki deneme kelimesi içeren satırları, deneme2.txt dosyasına yazdırmak istesek ne yapabiliriz?
//var %1 = 1 | while (%1 <= $lines(deneme.txt)) { if (deneme isin $read(deneme.txt)) { write deneme2.txt $v2 } | inc %1 }
Şeklinde bir kod yazmamız gerekecekti.
Ama /filter kullanarak;
/filter -ff deneme.txt deneme2.txt *deneme*
Şeklinde yapabiliriz. Gördüğünüz gibi gayet kolaylık sağlayan bir komut.
Not: /filter biraz karışıktır ama, önemli işlevler yapan bir komutdur. Kullanmanızı tavsiye ederim.
Bakınız: /help /filter


7- Komut kullanarak aktif ekranda text aramak? Bakınız: /findtext -n text

Normal şartlarda, CTRL+F tuşuna basarak aktif ekranda arama yaparız.
Ama /findtext komutu ile, komut kullanarakda arayabiliriz.
Örneğin: /findtext mIRC gibi.
-n: Anahtarı, bulunan satıra gitmemenizi sağlar.


8- /loadbuf kullanın. While ve goto kullanımından kurtulursunuz.

Örneğin: Deneme.txt dosyasındaki tüm satırları, @deneme penceresine aktarmak istesek, normalde while yada goto kullanırsınız.
Ama /loadbuf kullanarak bu döngülerden kurtulabilirsiniz.
/loadbuf @deneme deneme.txt => En basit kullanım.
/loadbuf komutunda bir çok özellik daha vardır.
Mesela, belirlediğiniz satır aralıklarını yükletebilirsiniz.
Mesela, -o anahtarını kullanarak bir dialog'daki item'e yükletebilirsiniz.
Mesela, -t anahtarını kullanarak yükletilen her satıra $timestamp(saat) koyabilirsiniz.
Buna benzer bir çok özelliği olmakla beraber, kullanım olarak gayet açık ve kullanışlı bir komutdur.
Bakınız: /help /loadbuf


9- /noop kullanın.

Mesela, mIRC klasöründe bulunan tüm dosyaları echolatmak isteseydik?
//echo -a $findfile($mircdir,*,0,echo -a $1-) Şeklinde bir komut kullanacaktık.
Ama /noop kullanarak, gereksiz kullanım(lar)dan kurtulabiliriz.
Bakınız: //noop $findfile($mircdir,*,0,echo -a $1-) Şeklinde.


10- /timer kullanırken bazı identifierlarda veya değişkenlerde "!" kullanın.

Evet herhangi bir timer açtığınız zaman, o anki durum sabitlenir.
Örneğin: //timer 0 5 echo - $time => yaptığınızda, devamlı timer'ı başlattığınızdaki saati gösterecektir.
İsterse 1 saat geçsin devamlı aynı saat gösterilecektir.
Fakat: //timer 0 5 echo - $!time => şeklinde yaparsanız bu sorun ortadan kalkıcaktır.


11- Tek /timer komutunda birden fazla komut uygulatın.

Normalde /timer komutunda verdiğin görev 1 tane olabiliyor. Yani böyle bilinir genellikle.
Örneğin: //timer 0 5 echo - Deneme | Deneme2 => yaptığınızda;

Kod:
* Timer 1 activated
* /deneme2: not connected to server
Hatasını alırsınız. Çünki "|" işlevini bir başka komut şeklinde algılar /timer.
Bu sorunu ortadan kaldırmak için; "|" prefix'ini $chr(124) olarak girmelisiniz.
Örneğin: //timer 0 5 echo - Deneme $chr(124) echo - Deneme2. => Şeklinde.
Aynı işlev "{" "}" prefixleri içinde geçerlidir. Yani bu perfixlerinde $chr(numarası) şeklinde girmelisiniz, (Tanınması için)

/timer hakkında bir kaç özel bilgi:
Aktif olan timer'ları görüntülemek için: /timer
Herhangi bir saat'de işlev yapmak için: /timer 15:00 echo - Saat ÜÇ. Gibi.
Belirtilen timer'ı pause komumuna almak için: /timer[num|name] -p
Pause konumundaki timer'ı resume konumuna almak için: /timer[num|name] -r
Gibi bilgiler önemlidir.


12- /tokenize kullanın.

/tokenize komutunu görmüşsünüzdür mIRC help dosyasında, Ama pek kullanılmaz.
Özellikle socket'dan gelen verilerde kullanmanız gereken bir komutdur.
En basit anlatımla: //tokenize 46 1.2 3.4.5 6.7 | .echo -a $1 $2 $3 $4 $5
Komutunu uygula***** anlayabilirsiniz. Buradaki 46 numarası, "." noktanın ascii kod numarasıdır.
Yani bu komut belirlediğiniz ascii numarasını kelimelere böler.
Şöyleki: //tokenize 46 1.2 3.4.5 6.7 ($1 = 1 - $2 = 2 3 - $3 = 4 - $4 = 5 6 - $5 = 7)
Sanırım gayet açık. Yani 1. kelime ve sonraki kelimeleri oluşturur.


13- /ban komutunu kullanın.

Korumalarınızda gereksiz /mode ve ek olarak /kick kullanmayın.
Örneğin:
//mode #kanal +b $address($nick,2) | kick #kanal $nick sebeb.
Komutu ile
/ban -k #kanal $nick 2 sebeb.
Aynı işlevi görecektir.
Ek olarak -uN anahtarını kullanarak, ban'ın ne zaman açılacağınıda belirlersiniz.(N = Saniye)


14- Boşluk tespitinde $numtok yerine $0 kullanın.

Örneğin:
on *:text:*:#:echo - Nick: $nick - Gönderdiği text'deki boşluk sayısı: $numtok($1-,32)
Yerine;
on *:text:*:#:echo - Nick: $nick - Gönderdiği text'deki boşluk sayısı: $0
Yapabilirsiniz.


15- /while komutunda /set yerine /var kullanın.

Örneğin:
//set %değişken 1 | while (%değişken <= 10) { echo - %değişken | inc %değişken }
Yaptığınızda, %değişken değişkeni 11 olur. Ve hafızada kalır. Yani silinmez.
//var %değişken = 1 | while (%değişken <= 10) { echo - %değişken | inc %değişken }
Yaptığınız'da, tekrarlama sona erdiğinde %değişken değişkeni silinir.
Not: /var komutunda %değişken değerini belirlerken her zaman için, "=" işaretini kullanın.
Daha sağlıklı çalışacaktır.


16- Basit %değişken işlemlerinde $calc yerine, değişkeni kullanın.

Örneğin:
//var %d = $calc(100+250) | echo - %d
Şeklinde bir komut uygulamaktansa;
//var %d = 100 + 250 | echo - %d
Şeklinde kullanabilirsiniz. Bunu örnek olarak gösterdim. Burada pek gereksinimsiz görülebilir.
Ama ileride işinize yarayacaktır.


17- Karmaşık bilgi kayıt etme/üzerinde işlev yapma konularında, her zaman hash table kullanın.

Hash table kullanın çünki, /inc /set gibi komutlar işlevleri hard-disk'de yapıcaktır.
Ama hash kullandığınız'da işlevler, ram'da gerçekleşir. Bunu zaten hash table dersimizde söylemiştim.
/inc /set komutlarında -e anahtarını kullanmadığınız sürece veriler mIRC'inide kayıtlı kalıcaktır.
Fakat hash table'da, /hsave kullanmazsanız, mIRC'i kapattığınız an veriler silinir. Serbest bırakılır.


18- /unset %değişken | /unset %değişken2 kullanmayın.

Bu basit bir bilgidir ama, forumda devamlı gözüme çarpan bir hatanız.
Yani 2 veya fazlası değişken'i silmek için, her defasında /unset yazmanıza gerek yoktur.
/unset %değişken %değişken2 %değişken3 şeklinde kaldırabilirsiniz.
Ayrıca belirtilen değişkenleri, wildcards kullanarak silebilirsiniz.
Örneğin: %dee ile başlayan 3 değikenimiz var.
Bunları silmek için: /unset %dee* yapmamız yeterli olur.
Değişkenlerin silindiğinden emin olmak istiyorsanız; /unset -s %değişken yapabilirsiniz.


19- on me|!|@:*: kullanın.
Bazı event'lar sizide kapsadığı için genellikle;
on *:join:#:if ($nick == $me) { komut }
on *:kick:#:if ($nick == $me) { komut }
Şeklinde kullanırsınız.
Bu hem ek bir sorguya sebeb olur, hemde kod'un uzun görünmesine sebeb olur.
Bunun için: on me:*:event: şeklinde kullanmanız daha mantıklı olur.
Kendinizi muaf etmek için: on !*:join:#:
Opsanız işlev için: on @*:text:*:#:

Bunlar örnektir.



20- Ek bilgiler. Kullanmanız gereken identifier'lar.

Evet buradaki identifier'ların hepsini öğrenmenizi istiyorum. Bunlar gerçekten öğrenmek istiyorsanız, kesinlikle kavramak zorunda olduğunuz ve en sık kullanılan identifier'lar.

Text: $left, $right, $mid, $count, $pos, $regex, $regsub, $regsubex, $remove vs
Token: $addtok, $gettok, $istok, $wildtok vs.
Şifreleme: $encode, $decode, $sha1, $md5, $crc vs.
Kanal: $mode, $chanmodes, $chantypes, $ialchan, $ibl, $iil, $iel, $comchan, $chan vs.
Pencere: $window, $active, $appstate, $query vs.
Dosya: $read, $readini, $nopath, $qt, $noqt, $file, $findfile, $ini vs.
Artakalan: $chr, $asc, $calc, $away, $rawmsg vs.

-

Umarım işinize yarar. Birşeyler öğrenebilirsiniz.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst