KintaRo Posted October 27, 2010 Share Posted October 27, 2010 DEĞİŞKENLER (Variable)* Değişkenler için programlamada yapı taşları diyebiliriz. Değişkenleri içlerine veri depolamak, daha sonra depoladığımız verileri istersek değiştirmek, başka değişken veya değerlerle birleştirmek, ekrana yazdırmak, hesaplama yapmak gibi bir çok işlemde kullanabiliriz.Örnek: isim = "ahmet" Burda isim değişkenine ahmet değerini depoladık. Şimdi bunu istediğimiz yerde kullanabiliriz.Dialog.Message("Adamın ismi:", isim) Bu kod ekrana ahmet değerini yazdıracaktır. İstersek Dialog.Message("Adamın ismi:", "ahmet") kodunuda kullanabilirdik, sonuç değişmezdi fakat, programlamada ilerledikçe çok uzun değerler, birleştirilmesi gereken değerler gibi olaylarla çalışmaya başladığınız zaman değişken olayının işinizi çok kolaylaştıracağını göreceksiniz. Örneğin 10 sayfalık bir projede her sayfada bir INI dosyasından veri alacaksınız. INI dosyasıda diyelimki C:\Documents and Settings\selami\desktop\programlar\adresler.ini adresinde. Burdan veri çekmek için her sayfadaki kodu şu şekilde kullanmanız gerekiyor:INIFile.GetValue("C:\\Documents and Settings\\selami\\desktop\\programlar\\adresler.ini", "Ev", "adres1") fakat her kodda bu kadar uzun yol kullanmak yerine şu şekilde yapsaydık daha derli toplu bir görüntü oluşurdu:sDosyaYolu = "C:\\Documents and Settings\\selami\\desktop\\programlar\\adresler.ini"; INIFile.GetValue(sDosyaYolu, "Ev", "adres1") Gördüğünüz gibi sadece değişkenimizi yazdık ve veriyi çektik.* Değişkendeki veriyi, kendine ekleme yaparakda değiştirebiliriz.Örnek:sayi = 10 sayi = sayi + 10 Bu şekilde yaptigimiz zaman ilk satirda sayi degiskenine 10 sayısını depolarız ve ikinci satırda sayi degiskenini 10 ile toplayip depoladigi veriyi degistirebiliriz.*** Global Functionsda örneğin isim = "selami" değişkenini tanımladıktan sonra projenin başka yerinde isim değişkenine başka bir veri depolarsak son depoladığımız veri geçerli olmaktadır.a = 10; b = a; Dialog.Message("değer", Bu örnektede b değişkenine a değişkenini depoluyoruz, a değişkenine daha önce 10 değerini depoladığımız için b değişkenini ekrana yazdırdığımızda karşımıza 10 değeri gelecektir.*** Değişkenler sayı ile başlayamaz, operatorler isimleri kullanilamaz, boşluk karakteri kullanılamaz ve değişkenlerde türkçe karakter kullanılamaz!.Hatalı değişkenlere örnekler:11data%MyValue%$strDataforlocal_FirstName+LastName_User Name NUMARALAR (number)Numaralar Numerik değerlerdir. AMS de kullanılabilecek geçerli numara örnekleri şunlardır:4 4. .4 0.4 4.57e-3 0.3e12 DEĞERLER (string)Değerlerden sıkça bahsettik, şimdi ne olduğuna bakalım. Değerler, birleşik karakterlerdir. Örneğin “Joe2” 4 karakterli bir değerdir. Büyük J ile başlar, 2 sayısı ile biter. Karakter sınırı yoktur, bir kelimeden, bir cümleden yada bir kitabı tamamen içerebilir.Değerler her zaman "" karakterleri içinde gösterilir:isim = "selami" sehir = "istanbul" adres = "12 nolu sk. 78. cadde" Eğer değerlerin için "" tırnak işareti kullanmak istiyorsanız kullanacağınız tırnak işaretlerinden önce \ karakterini kullanmanız gerekir:cumle = "Orda bir köy var uzakta, Köyün ismi \"abacılar köyü\" dür." Bu şekilde kullanılmazsa syntax hatası verir.Değerlerin içinde satırlar kullanmak isterseniz \n ibaresini kullanmanız gerekir:Lines = "Line one.\nLine two.\nLine three"; Dialog.Message("Here is the String", Lines); Dosya yolu belirtirken \ karakterinden iki adet kullanmanız gerekir.dosya_yolu = "C:\\Program Files\\MSN\\msn.exe" Eğer değer sadece sayı içeriyorsa ams bunu direk sayıya dönüştürecektir.a = "10" + 1 -- sonuç 11 olacaktır. Ama değerin kendi içinde hesaplama yaptırılamaz.a = "10+1" -- ekrana yazdırıldığında 10+1 olarak görünecektir. a = 10+1 -- hesaplamada doğru yol budur. FONKSİYONLAR (function)Büyük projelerinizde kod karmaşından kurtulmak için yardımınıza koşacak aracımız fonksiyonlardır. Hazırlayacağınız fonksiyon kodlarıyla, aynı kodları tekrar tekrar kullanmaktan kurtursunuz. Kullanımı şu şekildedir:function fonksiyon_adı (argümanlar) fonksiyon kodları return dönüş_değeri; end Örnek:function hosgeldin() Dialog.Message("merhaba","Hoşgeldiniz!"); end Programın giriş bölümünehosgeldin()kodunu yazdığınız zaman Dialog penceresini açıp hoşgeldiniz diyecektir. Tabi bu basit bir örnek. Sınırı hayalgücünüzle doğru orantılıdır... TABLOLAR (table)Tablolar indekslenmiş değerleri liste halinde tek bir isimde depolamanın en güçlü ve kolay yoludur.Örnek:isimler = {"Ahmet", "Selami", "Mustafa"} Dialog.Message("Tablodaki ikinci kişi:", isimler[2]) bu kod ekrana selami ismini yazdıracaktır. çünkü isimler[2] dediğimizde isimler tablosunda 2. sıradaki değeri alacaktır.İkinci tablolama şekli:tSarkici = {} tSarkici.isim = "şebnem" tSarkici.soyisim = "ferah" tSarkici.yas = "35" Dialog.Message(tSarkici.isim, tSarkici.soyisim) bu kod şebnem ve ferah değerlerini yazdıracaktır.Tablolamada şöyle bir yazım tarzı daha vardır;tVeriler = {Meyve="Elma",Renk="Kırmızı"} Dialog.Message("", tVeriler.Meyve); AMS8'de pairs espriside bu tablolardaki Meyve ve Renk yazılarını göstermemizi sağlıyor..pairs argümanını şu şekildede kullanabiliriz:tMeyveler = {"Elma", "Armut", "Portakal"} for i in pairs(tMeyveler) do Dialog.Message("Meyveler:", tMeyveler[i]) end Bu kodu çalıştırdığımız zaman tMeyveler tablosundaki öğeleri sırayla ekrana yazdıracaktır. i argümanının esprisi daha öncede belirttiğimiz gibi tablonun içindeki öğelerin indeks numaralarıdır. KONTROL YAPILARI (KOŞULLANDIRMA)Kodlarınıza koşullar ve kontrol yapıları ile yön verebilirsiniz.Kontrol Yapı operatorleri if, while, repeat ve for'dur.- ifeğer anlamına gelen if ile koşullandırma yapıyoruz. Yapısı basitçe şu şekildedir:if şartlandırma then koşul gerçekleşirse çalışacak kodlar end Örnek:x = 50; if x > 10 then -- eğer x 10 sayısından büyükse Dialog.Message("result", "x, 10'dan büyüktür"); -- mesajı görüntüle. end else operatoru ile koşullandırmamıza şartlar koşabiliriz:x = 50; if x > 10 then -- eğer x 10 sayısından büyükse Dialog.Message("result", "x, 10'dan büyüktür"); -- mesajı görüntüle. else -- değilse Dialog.Message("result", "x, 10'dan küçüktür"); -- mesajı görüntüle. end elseif kullanarak koşullandırmamızdaki doğru sonuca ulaşınca çalıştırılacak kodları belirleyebiliriz:x = 5; if x == 10 then Dialog.Message("", "x eşittir 10"); elseif x == 11 then Dialog.Message("", "x eşittir 11"); elseif x == 12 then Dialog.Message("", "x eşittir 12"); else Dialog.Message("", "x eşit değildir 10/11/12 "); end eğer x ordaki hiç bir sayıya eşit olmadığı için else den sonraki eşit değildir mesajı görüntülenecektir. fakat x = 10 olsaydı ilk mesaj, 11 olsaydı 2. mesaj, 12 olsaydı 2. mesaj görüntülenecekti. - WhileWhile döngüsü, koyduğumuz şart yerine gelene kadar kodu tekrarlayacaktır. Basit yapı şu şekildedir:while şartlandırma do çalıştılacak kodlar end Örnek:a = 1; while a < 10 do a = a + 1; end Bu kodda a = a + 1 kodu 9 defa çalıştırılacaktır. Çünkü şartımızda a < 10 (a 10'dan küçükse) dedik ve a = 1, yani 10 sayısına ulaşmak için 9 kere 1 ile toplamamız gerekiyor a = a + 1 dediğimizde a+1+1+1+1+1+1+1+1 şeklinde çalışacak ve sayı 10'a ulaşında duracaktır.while döngüsü esnasında yine şartlandırma yaparak break argümanı ile döngüyü durdurmak mümkün.count = 1; while count < 100 do -- count 100 den küçükse yap count = count + 1; -- count'a 1 ekle if count == 50 then -- eğer count 50'ye eşitse break; -- döngüyü durdur end end count 50 sayısına ulaştığında break argümanı döngüyü durduracaktır. - Forfor ifadesi kısaca kod tekrarı yaparken kullanılır. Basitçe yapısı şu şekildedir:for değişken = başlama, durma, adım do çalışacak kodlar end Örnek:for i = 1,10,1 do Dialog.Message("Number", i); end Burda i harfi döngüde dönen sayıyı belirtir. i=1,10,1 şu demektir;i = döngü sayısı1 = başlangıç10 = bitiş1 = adımyani 1 den 10 a kadar 1'er 1'er say ve i harfinde depoladaha sonrada Dialog.Message("Number", i); yazarak dialogda sayıları gösterir.Bitiş sayısı kaç ise o sayıya kadar döngü tekrarlanır. - repeat:Repeat döngüsü for döngüsüne çok benzerlik göstermektedir. Verilen koşulu until şartlandırmasına kadar tekrar eder.Örnek:x = 50; repeat x = x + 1; - altta x >= 100 diye koşul koyduk bu koşul sağlanana kadar x'in üzerine bir ekleyecek.. until x >= 100 - koşulumuz x değişkeni 100e eşit olursa veya büyük olursa bu koşul sağlanınca döngü duracak *** break argümanı for döngüsünde, repeat döngüsünde ve while döngüsünde döngüyü durdurmak için kullanılır. OPERATORLER- Aritmetik Operatorler:Aritmetik Operatorler Matematiksel işlemlerde kullanılır. Şu operatorler desteklenmektedir:+ (toplama)- (çıkarma)* (çarpma)/ (bölme)% (yüzde)^ (üssü)unary - (olumsuzluk)Örnek:a = 5 + 2; -- 5+2 yi topla ve a değişkeninde depola b = a * 100; -- a değişkeninde depolanan sayıyı 100 ile çarp Dialog.Message("Sonuç:", -- b'yi yazdır Denediğiniz zaman 700 sonucu çıktığını göreceksiniz. - İlişkisel Operatorler:İlişkisel operatorler iki değeri karşılaştırmak için kullanılır. Şu operatorler desteklenmektedir:> (Büyükse)< (Küçükse)<= (küçükse yada eşitse)>= (büyükse yada eşitse)~= (eşit değilse)== (eşitse)Örnek:a = 5 b = 1 if a > b then -- eğer a, b'den büyükse Dialog.Message("Sonuç:", "a, b'den büyüktür.") end Kod bu şekilde çalıştırıldığında "a, b'den büyüktür" şeklinde bir dialog penceresi çıkacaktır. a ve b deki sayılar yer değiştirildiğinde hiç bir yanıt vermeyecektir. Kodlamada büyük-küçük harf duyarlılığına dikkat ediniz. Şöyleki;"ahmet" == "ahmet" -- eşittir "Ahmet" == "ahmet" -- eşit değildir. - Yerel Operatorler:Yerel operatorler Boolean işlemlerde kullanılır. (Boolean'in tam bir türkçe karşılığı yok, true veya false alan değerler diyoruz kısaca. Yani bu işlemlerin sonucunda geri dönen değer true yada false dır.). Desteklenen operatorler şunlardır:and (and içeren değerler aynı dönüşü vermelidir)or (or içeren değerlerden en az biri istenen dönüşü vermelidir)not (değerin zıttını verir)*** Burdan nil operatorunede değinmek isterim. nil demek boş, geçersiz demektir. yani a = nil derseniz a'nın karşılığında birşey dönmez. Global Functions'da boş bir değer tanımlamak ve daha sonradan bunun içine farklı veriler depolamak için bu tekniği kullanabilirsiniz. Bu bilgi kenarda kalsın.a = true; b = false; c = a and b; -- c değişkenine false değeri depolanır. a = true olsada b = false'dır çünkü. d = a and nil; -- d değişkenine false depolanır. e = not b; -- b = false olduğu için not operatörüde zıttını vereceği için e değişkenine true depolanır. Dialog.Message("Sonuç:", e) derseniz sonucu göreceksiniz.Örnek:a = true; b = true; if a and b then -- eğer a ve b true ise Dialog.Message("Sonuç:", "tüm değerler: true") else -- değilse Dialog.Message("Sonuç:", "bazı değerler false içeriyor!") end Yukarıdaki örnekte tüm değerler true mesajını alırsınız. Eğer a yada b değerlerinden birini false yaparsanız ikinci mesajı alırsınız. Eğer a and b yerine a or b derseniz değerlerden herhangi birinin true olması, tüm değerler true mesajını almanız için yeterlidir. - Uzunluk Operatoru:Bu operator yani #, değerin karakter uzunluğunu alır ve yazdırır.Örnek:nLength = #"Hey"; -- nLength değişkenine Hey kelimesinin karakterlerini sayar ve depolar (Yani 3) NOTLAR:Her zaman kullandığımız fakat ayrıntılarına pek değinmediğimiz şeylerden burda bahsedelim... - Birleştirme:Birleştirmeden kastımız; iki değerin, iki değişkenin yada iki komutun birleştirilmesidir. Bu argümanları birleştirmek için .. kullanılır. Örneğin;x = "ali"y = "veli"Dialog.Message("İsim:" x .. y)dediğimiz zaman ekrana aliveli şeklinde yazdıracaktır. eğer x .. " " .. y deseydik ekrana ali veli şeklinde yazdıracaktır. Yani iki değerin arasında boşluk koyduk. - Yorum Ekleme:Yazdığımız kodların yanına yorum (açıklama) eklemek için -- kullanırız. Eğer ekleyeceğimiz yorumlar birden fazla satır içeriyorsa yorumu --[[ yorum ]] şeklinde yazarız. Yorumlar yeşil renkte görünür. ve kodlamaya hiç bir işlevi yoktur. sadece açıklamadır.Örnek:-- bu bir yorumdur--[[ bu satılar yorum içerirbu satılar yorum içerirbu satılar yorum içerirbu satılar yorum içerir]] *** Kaynak olarak AMS Yardım Dosyasını ve kendi tecrübelerimi kullandım. Gördüğüm kadarıyla AMS ye başlayan arkadaşlar bu bilgilerden yoksun, sadece işine yarayan kısımları öğrenmeye çalışıyorlar ve ilerde zorluk çekiyorlar. AMS ile hatta programlama ile uğraşan herkes yukarıda anlatılan bu konuları bilmeleri gerekiyor. Çünkü bu bilgiler standarttır ve tüm dillerde hemen hemen aynıdır. Sadece pratikte farklılık göstermektedir. Aslında bilinmesi gereken bir çok konu daha var, ama temel olarak bilinmesi gerekenler yani olmazsa olmazlar bunlardır. Eksiklerim ve hatalarım varsa zamanla düzeltilecektir/eklenecektir. Sizlerinde mutlaka buda olmalı dediğiniz konular varsa onlarıda ekleriz. Umarım yararlı olur. Bu Dökümanı PDF halinde indirebilirsiniz:http://www.tamotomatik.org/dosya/ams.pdf AMS için Türkiyedeki En Geniş Türkçe Kaynak TNCTR'dir, ve bu döküman yine TNCTR için hazırlanmıştır.TnC TeaM 1 Link to comment Share on other sites More sharing options...
KintaRo Posted October 14, 2011 Author Share Posted October 14, 2011 [b]Döngüler (gelişmiş anlatım)[/b] Döngüler kısaca birden çok komutu tekrar etmek için veya tablodan veriyi çekip kullanmak için kullanılır ve işimizi çok kolaylaştırır. [color="#000000"][b]for döngüsü[/b][/color] Bu döngü belirttiğimiz bir sayı adedince yada eşleştirdiğimiz tablodaki veri sayısınca komutları tekrar eder. [CODE]for i =1,100 do end for -- döngü tipi i -- index 1 -- başlangıç 100 -- bitiş do -- yap emri[/CODE] Basit bir for döngüsü bu şekildedir. Başlangıç ve bitiş adedi arasındaki sayı kadar içerdeki komutları tekrar eder. 1,100,5 yaparsak 5 sayısı adımı belirtir. Yani komut tekrarını başlangıç ve bitiş adedince ve 5 er 5 er atlayarak yapar. Şimdi anlamanız için açıklayıcı bir örnek verelim. [color="#000000"][b]ListBox’a veri ekleme (örnek):[/b][/color] for i=1,100 do ListBox.AddItem(“ListBox1”, “Eklenen veri: “ .. i) end Bu kod Listbox’a Eklenen veri: 1, Eklenen veri: 2 şeklinde 1’den 100’e kadar satır ekleyecektir. [code]nSayi = 0; for i=1,100 do nSayi=nSayi+1 end Dialog.Message("Sayı:", nSayi)[/code] Bu örnek ise nSayi değişkenine 100 kere +1 yapacak ve sonuç olarak 100 sayısını verecektir. Yukardaki örnekler komut tekrarları içindi. Şimdi bir tablodan döngü ile nasıl veri çekeceğimizi görelim. Öncelikle bize bir tablo lazım, tablomuzu oluşturup gelen verileri Listbox’a ekleyelim. Bunun için en güzel örnek sanırım File.Find() fonksiyonu ile olur. [quote]for i,v in pairs(tablo) do end for -- döngü tipi i -- indeks v - gelen veri pairs -- eşleştir tablo -- tablo adı do -- yap emri[/quote] [b]Örnek:[/b] [code]tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil) for i,v in pairs(tAra) do ListBox.AddItem("ListBox3", v, "") End[/code] Bu kodlar C:\Windows klasorunde exe uzantılı dosyaları bulma sırasıyla Listbox’a ekleyecektir. Burada dikkat etmemiz gereken i ve v argümanı. i argümanı döngünün o andaki sıra nosunu, v argümanı ise o sıra nonun karşısındaki veriyi ifade eder. Örneğin yukardaki kodda tAra = C:\Windows dediğimizde bulduğu sonuçları şu şekilde listeler: [quote]1 C:\Windows\ALCMTR.EXE 2 C:\Windows\ALCWZRD.EXE 3 C:\Windows\explorer.exe 4 C:\Windows\hh.exe 5 C:\Windows\MicCal.exe 6 C:\Windows\NOTEPAD.EXE 7 C:\Windows\patchx86.exe 8 C:\Windows\regedit.exe 9 C:\Windows\RtaUpd.exe 0 C:\Windows\RTHDCPL.EXE 11 C:\Windows\RtkAudioService.exe 12 C:\Windows\RTLCPL.EXE 13 C:\Windows\RtlUpd.exe 14 C:\Windows\SkyTel.exe 15 C:\Windows\SOUNDMAN.EXE 16 C:\Windows\TASKMAN.EXE 17 C:\Windows\twunk_16.exe 18 C:\Windows\twunk_32.exe 19 C:\Windows\vncutil.exe 20 C:\Windows\winhelp.exe 21 C:\Windows\winhlp32.exe[/quote] En baştan başlayalım: C:\Windows\ALCMTR.EXE Sırasında; [quote]i = 1 olur v = C:\Windows\ALCMTR.EXE olur.[/quote] C:\Windows\ALCWZRD.EXE Sırasında; [quote]i = 2 olur v = C:\Windows\ALCWZRD.EXE olur.[/quote] bu şekilde devam eder. yani i her v için sıra numarasını ifade eder. yukarıda verdiğimiz [quote]ListBox.AddItem("ListBox3", v, "")[/quote] kodda geçen v ile i sırasındaki verileri tek tek listboxa ekler. Sadece Dosya isimlerini eklemek isteseydik kodumuz şu şekilde olmalıydı: [code]tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil) for i,v in pairs(tAra) do tAyir = String.SplitPath(v) ListBox.AddItem("ListBox3", tAyir.Filename, "") End[/code] ** String.SplitPath() fonksiyonu bir dosya yolunu Sürücü, Klasör, Dosya Adı, Dosya Uzantısı şeklinde ayrılmasını sağlar. [color="#000000"][b]for döngüsünü durdurmak[/b][/color] Bazı durumlarda for döngüsünü bir koşul ile durdurmak isteriz. Yukardaki örnekten yola çıkarak devam edelim. [code]tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil) for i,v in pairs(tAra) do ListBox.AddItem("ListBox3", v, "") End[/code] burda C:\Windows klasöründeki tüm dosyaları bulup listboxa ekletiyoruz. Ama diyelim ki C:\Windows\SOUNDMAN.EXE dosyasını bulduğumuz zaman ekletmeyi kesmek istiyoruz. bunun için break kullanmalıyız şöyleki: [code]tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil) for i,v in pairs(tAra) do ListBox.AddItem("ListBox3", v, "") if v == "C:\Windows\SOUNDMAN.EXE" then break; end End[/code] yani döngüdeki v, C:\Windows\SOUNDMAN.EXE verisine eşitse döngüyü durduk dedik. break argümanı kısaca bu şekilde kullanılır. [color="#000000"][b]while döngüsü[/b][/color] bu döngü belli koşullar altında döngünün gerçekleşmesini sağlar. Örnek2: [code]a = 1; -- a değişkenine 1 sayısını atadık. yani a artık bir number (sayı) while a < 10 do -- a değeri 10'dan küçük olduğu sürece döngüye devam et dedik a = a + 1; -- a değerini+1 ekleyerek tekrarla (yani a zaten 1 idi. +1 eklersek 2 olacak, 3 olacak ve böyle devam edecek) end -- bitir.[/code] bu örnek a değeri 10'dan büyük olduğu anda duracaktır. Çünkü koşulumuz o şekildeydi. Örnek2: [code]count = 1; -- count değerine 1 sayısını ata while count < 100 do -- count değeri 100 sayısından küçük olduğu sürece döngüye devam et count = count + 1; -- count değerine +1 ekle if count == 50 then -- eğer count 50 sayısına eşit olursa break; -- döngüyü durdur end end[/code] Bu örnek ile 1. örneğin arasındaki fark, 2. bir koşul ile döngüyü durdurmamız. ** while döngüsünü for döngüsünde olduğu gibi tablolardada kullanabiliriz. Özellikle SQLite3 gibi veritabanı işlemlerinde veri çekmek için çokça kullanmamız gerekir. [color="#000000"][b]Repeat[/b][/color] Bu döngü adındanda belli olduğu gibi istediğimiz koşullar gerçekleşene kadar bazı işlemleri tekrar ettirmek için kullanırız. [code]i = 1; -- i değişkenine 1 sayısını ata repeat -- tekrarla i = i + 1; -- i değişkenine +1 ekle until i > 10 -- i değişkeni 10 sayısından büyük olana kadar devam et.[/code] Yapı ve görünüş olarak birbirlerine benzeselerde, for, while ve repeat döngülerini çok farklı şeyler için kullanabiliyoruz. Tabiiki bu sizin ihtiyacınıza ve hayalgücünüze doğru orantılıdır. Link to comment Share on other sites More sharing options...
KintaRo Posted October 14, 2011 Author Share Posted October 14, 2011 [warning][b]Anlatımını istediğiniz, anlamadığınız veya merak ettiğiniz konular varsa ÖM atarsanız değerlendirip anlatımını yapabilirim.[/b][/warning] Link to comment Share on other sites More sharing options...
KintaRo Posted October 14, 2011 Author Share Posted October 14, 2011 [color="#000000"][b]Help (yardım dosyası) Kullanımı[/b] AMS Bölümünde açılan başlıkların yarısı belki daha fazlası, help dosyasına bakıp yardım alınmadığından veya help dosyasını kullanmayı bilmemekten kaynaklanmakta. O yüzden help dosyasınının nasıl kullanılanacağına dair bir anlatım yapmayı uygun gördüm. Öncelikle help dosyası ingilizce olabilir, ingilizceniz zayıf olabilir bu önemli değildir. Önemli olan doğru yere doğru şekilde bakmanızdır. Help dosyasında bir komut için 2 ayrı bölüm bulunur. Overview (Genel Bakış) ve Examples (Örnekler) [img]http://i.imgur.com/1J2if.png[/img] [b]Overview: [/b] Bu kısımda Komutun ne işe yaradığı, o komut içine yazılacak argümanlar ve dönüşler yer alır ListBox.FindItem() için help dosyasını açtığınızda en üstte şu metin çıkacaktır: [quote]number ListBox.FindItem ( string ObjectName, number StartAfter, number SearchType, string SearchText )[/quote] burdaki number komutu çalıştırdığınızda size bir number dönüşü vereceğini ifade eder. [u]string ObjectName[/u] kısmı ise, ilk mesajımızda bahsettiğimiz string olacak şekilde ayarlanması gerektiğini ifade eder. Yani bir tablo yada sayı koyamayız. "ListBox1" gibi bir değer olmalı obje ismi. [u]number StartAfter;[/u] number daha öncedende dediğimiz gibi sayı girileceğini, string ise bir değer girileceğini ifade eder, StartAfter, SearchType ve SearchText için aşağıya bakınız. [u]Description:[/u] Bu kısım komutun ne işe yaradığını ifade eder. Burda yazan metni google translate gibi herhangi bir tercümanla çevirerek azçok ne anlatmak istediğini anlayabiliriz. Zaten bilgisayar ile haşır neşir olanların anlayacağı kadar basite indirgenmiş olarak karşımıza çıkmakta. Ne dediğine bakalım: Searches through the items in a listbox object for a specific string and returns the index (line number) where it was found. Belirttiğiniz sıra numarasından başlayarak belirlediğiniz metni listbox nesnesinde ara ve sıra numarasını size geri döndürür. Parameters: Burda komutun içinde kullanılan argümanları neye göre kullanacağımızı gösterir. Yine ListBox.FindItem() örneğine bakarsanız [quote]ObjectName (string) The name of the listbox object.[/quote] yazmakta. açılımı ise: (değer) Listbox nesnesinin ismi anlamına gelmektedir. [quote]StartAfter (number) The index (line number) to start searching after. The search will begin in the next item in the list. You can use an index of -1 (or variable LB_ALLITEMS) to search all listbox items[/quote]. (sayı) Aramanın başlayacağı satır sırası. Arama bu sıra nodaki satırdan bir sonrakinden başlayarak devam edecektir. Tüm satırlarda aramak için -1 yada LB_ALLITEMS yazın. [u]SearchType (number) The type of search to perform:[/u] [table] [tr] [th]CONSTANT[/th][th]VALUE[/th][th]DESCRIPTION[/th] [/tr] [tr] [td]LB_BYTEXT[/td][td]0[/td][td]Search only the item text. (Default)[/td] [/tr] [tr] [td]LB_BYDATA[/td][td]1[/td][td]Search only the associated item data.[/td] [/tr] [tr] [td]LB_BYTEXTDATA[/td][td]2[/td][td]Search both the item text and item data.[/td] [/tr] [/table] ** Burda isterseniz LB_BYTEXT gibi en soldaki argümanları isterseniz yanlarında bulunan 0,1,2 gibi sayıları kullanabilirsiniz. Yani her biri birbirinin yerine geçer. Mesela LB_BYTEXT yerine 0 kullanabilirsiniz.. [quote]LB_BYTEXT: Search only the item text. (Default)[/quote] - Sadece satırdaki metinlerin içinde ara [quote]LB_BYDATA: Search only the associated item data.[/quote] - sadece satırdaki data kısımlarındaki metinlerde ara [quote]LB_BYTEXTDATA: Search both the item text and item data.[/quote] - satır metni ve data mentinin her ikisindede ara. [quote]SearchText (string) The string of text to search for in the listbox object. You can use the * and ? wildcards in this field to search for text that matches a specific pattern.[/quote] (değer) Listbox satırları içinde aranacak metin. * ve ? gibi argümanlar ekleyerek arama yapabilirsiniz. Örn: *Kalem* yazarsanız içinde kalem geçen metinlerde arama yapacaktır. [b]Returns:[/b] işte en önemli kısım bu. Returns yani dönüşler Kodlamada yapı taşlarından biridir. Bir komutu verdiğimizde ondan gelen veriyi anlamak için bize ne döndürdüğünü bilmemiz gerekmektedir. Çünkü daha sonraki kodlarda o dönüşe göre işlem yaparız. [u]Dönüşlere Örnekler:[/u] [code]nAra = ListBox.FindItem("ListBox1", 1, LB_BYTEXT, "kalem")[/code] dediğimiz zaman nAra değişkenine ne depolayacağını bilmiyorsak hemen help dosyasını açıp Returns kısmına bakarız. Bakalım: [quote]Returns (number) The first item index where the search string was found. If the string was not found or an error occurs, the value -1 (variable LB_ERROR) is returned. You can use Application.GetLastError to determine whether this action failed, and why.[/quote] ** Her zaman dönüşün ne yapıda olduğunu en başta parantez içinde verir. Burda (number) demiş, yani bize 1, 3, 12, 100 gibi bir sayı verecek. Bizde bunu matematiksel işlemlerde, döngülerde vb. yerlerde kullanabiliriz. Peki diyelim ListBox'da hiç satır yok yani hiç veri eklenmemiş. Veyahut aradığınız kelime satırlar içinde bulunamadı. Bir programcı tüm ihtimalleri düşünmek zorundadır. İşte burda yine returns kısmından hata durumunda ne gibi bir dönüş vereceğini görürüz. ** Returns kısmında ilk olarak ne gibi bir dönüş verdiğini söyler, ardından hata durumunda dönecek değeri gösterir. yine örneğimize bakalım. Diyor ki: [quote]If the string was not found or an error occurs, the value -1 (variable LB_ERROR) is returned.[/quote] -Eğer hata olursa veya metin bulunamazsa -1 ya da LB_ERROR değeri döner. bu dönüşler hem işlem yapmada hemde hata kontrolünde çok işimize yarar. Örneklendirelim: Hata Kontrolü olmadan: [code]nAra = ListBox.FindItem("ListBox1", 1, LB_BYTEXT, "kalem") Dialog.Message("sonuç:", "kalem metni " .. nAra .. " satırında geçiyor.")[/code] Bu kodu çalıştırdığımızda [img]http://i.imgur.com/Vp3es.png[/img] Bu kodu çalıştırdığımızda, eğer listboxda veri yoksa yada metin bulunamadıysa aşağıdaki resimde olduğu gibi saçma bir sonuç verecektir. Şimdi birde Hata kontrolü olan bir örnek verelim: [code]nAra = ListBox.FindItem("ListBox1", 1, LB_BYTEXT, "kalem") -- kalem metnini ara if nAra ~= -1 then -- eğer hata oluşmuşsa Dialog.Message("sonuç:", "kalem metni " .. nAra .. " satırında geçiyor.") -- bulundu mesajı ver else -- eğer hata varsa Dialog.Message("Hata", "Aranılan metin bulunamadı") end[/code] Bu şekilde yaptığımızda hata olup olmamasına göre işlem yapılacaktır ve hem doğru kodlama olacaktır hemde projemiz daha profosyonel görünecektir. [b]Examples[/b]: Bu bölümde ise o koda ait örnekler yer alır. Bu örnekleri kullanarak ne nerede ne şekilde kullanılmış diye bakarak mantığı daha kolay kavramamıza yardımcı olur. Yukarda da dediğim gibi, Help dosyasından çekinmeyin, kullandıkça daha pratik hale gelecek ve vazgeçilmez yardımcınız olacaktır. Burda yardım eden bizler, ben olsun blackman12 olsun, MostWanted, spydevil olsun hiç birimiz bu işin eğitimini almadık. Projeler yaparak yahut diğer arkadaşların sorunlarına çözüm ararken mantık yürüterek ve help dosyasından yardım alarak hem bu işi öğrendik hemde diğer arkadaşlara yardımcı olduk. Ben kendi adıma konuşuyorum bilgimin %50'si help dosyası, %40'ı mantık, %10'uda örnek projelerdir. Takıldığınız yerler olursa önce bu sayfayı, daha sonra arama bölümünü kullanın, halen çözemediysenizde konu açmaktaktan çekinmeyin. [/color] Link to comment Share on other sites More sharing options...
Recommended Posts