Random Değerler Üretmek (Shuffle Array)

Actionscript projelerimizde gerek dinamik , gerekse statik yani kod ile oluşturduğumuz dizilerde ya da dışarıdan gelen dataları random çekme gibi bir ihtiyaç duyabiliriz. Bunun için yapmamız gereken random değerleri üretmek olacaktır. Bunun için Math.random() sınıfı kullanarız. Fakat datalarımızı rastgele çekebilmek için belli bir yapıyı kullanmamız gerekir. Datalarımızı bir fonksiyona çekeriz ve bu fonskiyonda belli bir algoritmada işlemlerimizi gerçekleştiririz.

İlk olarak fonksiyona argüman olarak bir array tanımlarız ve bu arrayin içindekileri kontrol edebilmek için tersden bir for döngüsüne sokarız. Tersden kastım dizinin boyutu kadar azalmasını sağlamak. 10..9..8.. gibi… Ayrıca random sayıları elde edebilmek içinse bir adetde randım sayı üretici yapmamız gerekiyor. Bunun içinde basit bir işlem yapıcaz argüman olarak sayı vericez ve bunu Math.random ile çoğaltacak bu kadar basit. Kısaca koda geçelim o daha iyi anlatacaktır ve daha iyi anlayacaksınızdır.

function getRandom(num:int):int
{
	return Math.floor((Math.random() * num));
}

function shuffleArray(array:Array):Array
{
	for(var i:int = array.length; i > 1; i--)
	{
		var j:int = getRandom(i);
		var tempArray:String = array[j];
		array[j] = array[i-1];
		array[i-1] = tempArray;
	}
	return array;
}

Şimdi kısaca koddan bahsedecek olursak; j değişkeni getRandom() metoduna gönderiyor ve ordan bize rastgele bir sayı üretiliyor. Daha sonra biz bu sayıları kullanarak arrayden rastgele elemanlar alıyoruz. Örneğin 5. indeksdeki bir değeri alıyoruz. Daha sonrasında ise bunu tempArray adındaki bi değişkene atıyoruz. Bunu aşağıdaki son elemana atıyoruz. Bu sayede sürekli karışık verileri elde etmiş oluyoruz. Kullanımı ise aşağıdaki gibi olmalıdır.

var array:Array = new Array("xx","yy","bb","cc","qq","ee","bn","jjk","üü","oo","ee","11","222");

var a:Array = shuffleArray(array);
trace(a);
Advertisements

C# StringBuilder

Yapılan programlarda bellek ve bellek yönetimi önemli bir yer tutar. Bu ve bunun gibi durumlarda performans ararız ve bunun için bir şeyler yapma ihtiyacını buluruz programımızda. Bunun için c# StringBuilder adında güzel bir sınıf oluşturmuş ve string ile çalışmamızı kolaylaştırmış. Stringlerimizi tekrardan isteyip + (artı) operatörüyle bağlamak yerine StringBuilder sınıfının Append özelliği ile stringlerimizi ekleyebiliyoruz.

Örneğin Sepet.cs adında bir Struct sınıfımız olsun bu sınıf içerisinde sırasıyla sepetNo, fiyat, adet şeklinde üç adet int değeri taşıyan değişkenlerimiz olsun. Daha sonra Program.cs tarafında bu sınıfdan çağrışım yapabiliriz.

Sepet.cs

internal struct StringMemory
{
internal string adi;
internal string soyadi;
internal byte yasi;

}

Program.cs Stringlerimizi birleştireceğimiz classımız.

StringBuilder sb = new StringBuilder();
sb.Append("Adı
");
sb.Append(sm.adi);
sb.Append("Soyadı
");
sb.Append(sm.soyadi);
sb.Append("Soyadı
");
sb.Append(sm.yasi);

Console.WriteLine(sb);

Console.ReadKey();

Bunu neden kullandık ?

Verdiğimiz String değerler bilgisayarın steak bölgesinde tutuluyor. Şimdi bu değerlerden performans sağlayabilmek için kodumuzu minumuma indirmemiz gerekiyor. Bunun için StringBuilder bu işimizi görüyor.

C# ile Region kullanımı

Örnek vermek gerekirse bir alışveriş sitesini ele alalım. Bu alışveriş sitesinde sırayla;  Sepet işlemleri,  sepet doldurma, sepet boşaltma, sepete ürün ekleme gibi bir çok işlemi yapan bir Basket adında bir class dosyamız olsun ve sepet ile ilgili tüm değişiklikleri bu class içerisinden halledelim. Fakat kodlarımızı ne kadar fonksiyonel yaparsak yapalım yani her işlemin bir fonksiyonu olsa da çoğu zaman başka işlerlemlerde yapabiliriz. Bu gibi durumlarda kodlarımızı üstüne comment yazarız bu bir nebze olsada işimizi çözer fakat kodlarımızın sağ kısmında kapattığımızda herhangi bir açıklama yapmaz bize.

Bu gibi durumlarda kodlarımızı kapamamıza rağmen hangi kapalı olan kodun ne iş yaptığını bilmeyiz bu gibi durumlarda karmaşıklık olur ve altından kalkılmayacak şeyler çıkar ortaya bu gibi durumlarda bunu engelleyebilmek için #region kullanırız.  Region açmak için diyezle birlikte #region ibaresini kullanırız. Bitmesini ise #endregion şeklinde sağlarız.

Kodların başlangıç yerine #region bitiş yerine ise #endregion ibarelerini kullanırız. Eğer #endregion ifadesini kullanmazsak #region başlangıç noktasından süslü parantezin en sonuncusuna kadar alır. Bir şekilde rezerve ediyoruz bu şekilde.

Örnek kullanımı hakkında ;

 

ArrayList Kullanımı

c# ile Array kullanımında objelere değer sayısı atamamız gerekir. Bu gibi durumlarda int,string,double,byte,long vs. gibi yapıları kullanırız ve yapıların boyutlarını belirtirken köşeli parantezler içerisine [10] gibi değerler gireriz. Aşağıda array kullanımını ve arrayList kullanımının farkını anlatmak adına bir adet array ve arraylist oluşturuyorum.

 string[] isimler = new string[3]{"Serhat","Sezer","Developer"};

bu şekilde çıktı alabilmek için yapmamız gereken tek şey. isimler[0] gibi ulaşabiliyoruz. Fakat alışveriş sepeti gibi uygulamalarda kullanıcının ne kadar ürün ekleyebileceğini bilmediğimiz için dinamik bir array oluşturamıyoruz. Bunun için ArrayListleri kullanabiliyoruz.

namespace ArrayList_Kullanimi
 {
 class Program
 {
 static void Main(string[] args)
 {
 OrnekArrayList();
 }
static void OrnekArrayList()
 {
 // kolleksiyon sınıfı oluşturulur.
ArrayList koleksiyonlar = new ArrayList();
// Kolleksiyona Object türünde değerler eklenir.
koleksiyonlar.Add("Serhat Sezer");
 koleksiyonlar.Add(20);
 koleksiyonlar.Add(new DateTime(17,2,2));
// Koleksiyon elemanlarına, dönüşüm(cast) yaparak erişilir. Çünki koleksiyon içerisinde Object türüne çevirerek oluşturlur ve kullanılır.
string adi = (string)koleksiyonlar[0];
 Console.WriteLine("Koleksiyondaki 1. Elemana erişildi\n " + adi);
// Koleksiyondaki elemanların tümüne erişilir : herhangi bir döngü türü ile olabilir.
Console.WriteLine("Kolleksiyondaki bütün elemanlara erişebilirsiniz...");
foreach(object item in koleksiyonlar)
 {
 Console.WriteLine(item);
 }
Console.ReadLine();
 }
 }
 }

ArrayList yapısı bize birden fazla veritipini eklememize olanak sağlıyor. Yani bir ArrayList objesinin içerisine string,double,long,int,uint,short gibi bir çok özellik ekleyebiliyoruz. Bunu yaparken ArrayList’in Add() metodunu kullanıyoruz. Fakat bu eklediğimiz nesneleri kullanabilmek için (türüne göre – int ,string , double- vs) tür dönüşümü yapmamız gerekiyor.

Yukarıdaki örnekte görüldüğü gibi 1. indekse sahip olan eleman 20 sayısını barındırıyor, Biz bunu kullanabilmek için 20 sayısını stringe çevirip işlememiz gerekiyor bunun için yapmamız gereken yol;

string yasi = (string)kolleksiyonlar[1];

Yukarıda yaptığımız kodda ise aldığımız number bir değeri string veri tipine çevirebiliyoruz.

Hexadecimal renk kodlarını as3’e uyarlamak

Yapılan projelerde bazı durumlarda, alt tarafta gizli bir işlem yapmak isteyebiliriz. Bu gibi durumlarda tasarıma uygun bir yerine, uygun bir şekilde saklanması, kamufile olması şart. Bunun için de renk kodlarını, varsa yazı stillerinin aynı olması gerekiyor. Böyle bir uygulama yapma ihtiyacı duydum ve dosylaarın Xml’den gelmesi gerekiyordu. Fakat renk kodlarını actionscripte uyarlamak “müşteri” tarafında biraz zordu o yüzden renk kodunu photoshopta alıp xmle girmesi gerekiyordu fakat photoshoptaki renk kodunu actionscript kabul etmiyordu sistem olarak bu durumda aşağıdaki slice metodunu kullanarak bu işlemi gerçekleştirdim.


var color:String = "#FFCC00";

if(color.charAt(0) == "#")
{
     color = "0x" + color.slice(1);

     var ct:ColorTransform = new ColorTransform();
     ct.color = uint(color);
     bg_mc.transform.colorTransform = ct;
}

Burda yaptığımız mantık ise slice metodu string karakterler içerisinde dilimleme işlemini gerçekleştiriyor. Yukarıdaki renk kodunun ilk değeri # (diyez) içeriyorsa aşağıdaki işlemleri gerçekleştir diyoruz. Daha sonra ise diyez işaretini atla ve daha sonraki dilimi getir ve ekle diyoruz. Daha sonra dinamik renk kodları ile movieclip rengimizi değiştiriyoruz. Bunu yaparkende ColorTransform sınıfını kullanıyoruz. String olarak çıktı alacağı için bu değeri biz uint değere aktarıp daha sonra movieclibe atıyoruz bu aldığımız değeri.