Default | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar default

SASS (scss dosyaları) ile !default anahtar kelimesi kullanımı

16 February 2016 Yorum yapılmamış

SASS Dokümantasyonunda Variable Defaults: !default alanında yazana göre;

You can assign to variables if they aren’t already assigned by adding the !default flag to the end of the value. This means that if the variable has already been assigned to, it won’t be re-assigned, but if it doesn’t have a value yet, it will be given one.

yani, !default anahtar kelimesi ile biten bir değişken tanımı varsa ve o ana kadar o değişken daha önce tanımlanmadıysa tanımlanır ve değer ataması yapılır, daha önce tanımlandıysa görmezden gelinir

Hemen bir örnek ile inceleyelim;

$ornek: 'ilk içerik';

$ornek: 'ikinci içerik' !default;

#main {
	content: $ornek;
}

Yukarıdaki SASS (scss dosyası) çıktısı aşağıdaki gibi olacaktır;

#main {
	content: 'ilk içerik';
}

Aynı şekilde

$renk: red;

$renk: blue !default;

#main {
	background-color: $renk;
}

SASS (scss dosyası) çıktısı aşağıdaki gibi olacaktır;

#main {
	background-color: red;
}

C# ile uzun süren method’ları kontrol altına alın

18 October 2013 Yorum yapılmamış

Uygulama geliştirirken karşılaştığımız birçok senaryoda çağırdığımız bir method’un uzun sürede cevap üretmemesinden dolayı kaynaklarımızı tükettiğini görebiliriz.

Çağırılan method’un belli bir zaman aşımı süresine sahip olması ve bu süre sonuna kadar değer üretmediyse sonlanması için birçok yöntem kullanabiliriz, fakat ben System.Threading namespace‘inde yeralan CancellationTokenSource sınıfını kullanan aşağıdaki yöntemi tercih ediyorum;

/// <summary>
/// Timeout süresinde tamamlanmayan method'u otomatik sonlandırır
/// </summary>
/// <param name="action">Çağırılacak method</param>
/// <param name="timeout">Milisaniye cinsinden zamanaşımı süresi</param>
/// <returns></returns>
public static bool Execute(Action action, int timeout)
{
	var tokenSource = new CancellationTokenSource();

	var token = tokenSource.Token;

	var task = Task.Factory.StartNew(action, token);

	if (!task.Wait(timeout, token))
	{
		tokenSource.Cancel();

		return false;
	}

	task.Dispose();

	return true;
}

/// <summary>
/// Timeout süresinde tamamlanmayan method'u otomatik sonlandırır
/// </summary>
/// <param name="action">Çağırılacak method</param>
/// <param name="timeout">Milisaniye cinsinden zamanaşımı süresi</param>
/// <returns></returns>
public static Tuple<bool, T> Execute<T>(Func<T> action, int timeout)
{
	var result = Tuple.Create(false, default(T));

	var tokenSource = new CancellationTokenSource();

	var token = tokenSource.Token;

	var task = Task.Factory.StartNew(() => { result = Tuple.Create(true, action.Invoke()); }, token);

	if (!task.Wait(timeout, token))
	{
		tokenSource.Cancel();
	}

	task.Dispose();

	return result;
}

Böylece değer döndürmeyen method’lar eğer timeout‘a uğramışsa geriye bool tipinde false değeri, timeout‘a uğramamışsa true değeri döndürebiliyoruz.

Geriye değer döndürecek method’lar eğer timeout‘a uğramışsa geriye Tuple sınıfından yeni bir değer döndürüyoruz. İki property’li Tuple‘ın birinci property’si timeout olup/olmadığını belirten bool tipinde, ikinci property ise çağırılan method’dan dönecek cevabın tipinin varsayılan değeri.

Bu methodlar sayesinde hatalar veya uzun süren method’ların kaynaklarımızı tüketmesi sorunları ile uğraşmadan uygulamalarımızı geliştirebiliriz.

Örnek kullanımlar;

Geriye değer döndürmeyen method’ları aşağıdaki örnek kullanım ile çağırabiliriz

var result = Execute(LongRunningProcess, 3000);

Geriye değer döndüren method’ları (örneğin int) aşağıdaki örnek kullanım ile çağırabiliriz

var result = Execute<int>(LongRunningProcess, 5000);