C Sharp

Vikipedi, özgür ansiklopedi
(C Sharp programlama dili sayfasından yönlendirildi)
Atla: kullan, ara

→ Bu maddenin özgün adı C# programlama dili olup, MediaWiki'ye özgü teknik nedenlerle C Sharp olarak yazılmıştır.

C# Programlama Dili (si şarp şeklinde telaffuz edilir), Microsoft'un geliştirmiş olduğu yeni nesil programlama dilidir. Yine Microsoft tarafından geliştirilmiş .NET Teknolojisi için geliştirilmiş dillerden biridir.

Microsoft tarafından geliştirilmiş olsa da ECMA ve ISO standartları altına alınmıştır.

C programlama dilinde bir tamsayı değişkeni 1 attırmak için ++ soneki kullanılır. C++ dili adını, C diliyle Nesneye Yönelimli Programlama yapabilmek için eklentiler (C With Classes) almıştır. Benzer şekilde C++ diline yeni eklentiler yapılarak ((C++)++) bir adım daha ileriye götürülmüş ve tamamen nesneye yönelik tasarlanmış C# dilinin isimlendirilmesinde, + karakterlerinin birbirlerine yakınlaşmış hali ve bir melodi anahtarı olan C# Major kullanılmıştır.

Bu dilin tasarlanmasına Pascal, Delphi derleyicileri ve J++ programlama dilinin tasarımlarıyla bilinen Anders Hejlsberg liderlik etmiştir.

Birçok alanda Java'yı kendisine örnek alır ve C# da java gibi C ve C++ kod sözdizimine benzer bir kod yapısındadır. .NET kütüphanelerini kullanmak amacıyla yazılan programların çalıştığı bilgisayarlarda uyumlu bir kütüphanenin ve yorumlayıcının bulunması gereklidir. Bu, Microsoft'un .Net Framework'u olabileceği gibi ECMA standartlarına uygun herhangi bir kütüphane ve yorumlayıcı da olabilir. Yaygın diğer kütüphanelere örnek olarak Portable.Net ve Mono verilebilir.

Özellikle nesne yönelimli programlama kavramının gelişmesine katkıda bulunan en aktif programlama dillerinden biridir .NET platformunun anadili olduğu bazı kesimler tarafından kabul görse de bazıları bunun doğru olmadığını savunur.

C#, .NET orta seviyeli programlama dillerindendir. Yani hem makine diline hem de insan algısına eşit seviyededir. Buradaki orta ifadesi dilin gücünü değil makine dili ile günlük konuşma diline olan mesafesini göstermektedir. Örneğin; Visual Basic .NET (VB.NET) yüksek seviyeli bir dildir dersek bu, dilin insanların günlük yaşantılarında konuşma biçimine yakın şekilde yazıldığını ifade etmektedir. Dolayısıyla VB.NET, C#.NET'ten daha güçlü bir dildir diyemeyiz. Programın çalışması istenen bilgisayarlarda framework kurulu olması gerekmektedir. (Win7 ve Vista'da framework kuruludur)

Tasarım hedefleri[değiştir | kaynağı değiştir]

ECMA tarafından C# dilinin tasarım hedefleri şöyle sıralanır:

  • C# basit, modern, genel-amaçlı, nesneye yönelik programlama dili olarak tasarlanmıştır.
  • Çünkü yazılımın sağlamlılığı, güvenirliliği ve programcıların üretkenliliği önemlidir. C# yazılım dili, güçlü tipleme kontrolü (strong type checking), dizin sınırlar kontrolü (array bounds checking), tanımlanmamış değişkenlerin kullanım tespiti, (source code portability), ve otomatik artık veri toplama gibi özelliklerine sahiptir.
  • Programcı portatifliği özellikle C ve C++ dilleri ile tecrübesi olanlar için çok önemlidir.
  • Enternasyonal hale koymak için verilen destek çok önemlidir.
  • C# programlama dili sunucu ve gömülü sistemler için tasarlanmıştır. Bununla birlikte C# programlama dili en basit işlevselli fonksiyondan işletim sistemini kullanan en teferruatlısına kadar kapsamaktadır.
  • C# uygulamaları hafıza ve işlemci gereksinimleri ile tutumlu olmak uzere tasarlanmıştır. Buna rağmen C# programlama dili performans açısından C veya assembly dili ile rekabet etmek için tasarlanmamıştır.

Merhaba Dünya[değiştir | kaynağı değiştir]

using System;
 
public static class MerhabaDunya
{
 
	static void Main()
	{
	  Console.WriteLine("Merhaba Dünya!");
	  Console.ReadKey();
	}
}

Basit bir hesap makinesi örneği[değiştir | kaynağı değiştir]

using System.Collections.Generic;
using System;
 
public static class GlobalMembersCalculator
{
 
	public static int no_of_errors;
 
	public static double error(string s)
	{
		no_of_errors++;
		cerr << "error: " << s << '\n';
		return 1;
	}
 
	public static Token_value curr_tok = Token_value.PRINT;
	public static double number_value;
	public static string string_value;
 
	public static Token_value get_token()
	{
		sbyte ch;
 
		do
		{
			if (!cin.get(ch))
				return curr_tok = Token_value.END;
		} while (ch != '\n' && char.IsWhiteSpace(ch));
 
		switch (ch)
		{
		case ';':
		case '\n':
			return curr_tok = Token_value.PRINT;
		case '*':
		case '/':
		case '+':
		case '-':
		case '(':
		case ')':
		case '=':
			return curr_tok = Token_value(ch);
		case '0':
			case '1':
				case '2':
					case '3':
						case '4':
		case '5':
			case '6':
				case '7':
					case '8':
						case '9':
		case '.':
			cin.putback(ch);
			cin >> number_value;
			return curr_tok = Token_value.NUMBER;
		default:
			if (char.IsLetter(ch))
			{
				string_value = ch;
				while (cin.get(ch) && char.IsLetterOrDigit(ch))
					string_value += ch;
 
				cin.putback(ch);
				return curr_tok = Token_value.NAME;
			}
			GlobalMembersCalculator.error("bad token");
			return curr_tok = Token_value.PRINT;
		}
	}
 
	public static Dictionary<string,double> table = new Dictionary<string,double>();
 
	public static double expr(bool get)
	{
		double left = GlobalMembersCalculator.term(get);
 
		for (;;)
			switch (curr_tok)
			{
			case Token_value.PLUS:
				left += GlobalMembersCalculator.term(true);
				break;
			case Token_value.MINUS:
				left -= GlobalMembersCalculator.term(true);
				break;
			default:
				return left;
			}
	}
 
	public static double prim(bool get)
	{
		if (get)
			GlobalMembersCalculator.get_token();
 
		switch (curr_tok)
		{
		case Token_value.NUMBER:
		{
			double v = number_value;
			GlobalMembersCalculator.get_token();
			return v;
		}
		case Token_value.NAME:
		{
			double & v = table[string_value];
			if (GlobalMembersCalculator.get_token() == Token_value.ASSIGN)
				v = GlobalMembersCalculator.expr(true);
			return v;
		}
		case Token_value.MINUS:
			return -GlobalMembersCalculator.prim(true);
		case Token_value.LP:
		{
			double e = GlobalMembersCalculator.expr(true);
			if (curr_tok != Token_value.RP)
				return GlobalMembersCalculator.error(") expected");
			GlobalMembersCalculator.get_token();
			return e;
		}
		default:
			return GlobalMembersCalculator.error("primary expected");
		}
	}
 
	public static double term(bool get)
	{
		double left = GlobalMembersCalculator.prim(get);
 
		for (;;)
			switch (curr_tok)
			{
			case Token_value.MUL:
				left *= GlobalMembersCalculator.prim(true);
				break;
			case Token_value.DIV:
				if (double d = GlobalMembersCalculator.prim(true))
				{
					left /= d;
					break;
				}
				return GlobalMembersCalculator.error("divide by 0");
			default:
				return left;
			}
	}
 
	static int Main()
	{
 
		table.Add("pi", 3.1415926535897932385);
		table.Add("e", 2.7182818284590452354);
 
		while (cin)
		{
			GlobalMembersCalculator.get_token();
			if (curr_tok == Token_value.END)
				break;
			if (curr_tok == Token_value.PRINT)
				continue;
			Console.Write(GlobalMembersCalculator.expr(false));
			Console.Write('\n');
		}
 
		return no_of_errors;
	}
}
 
public enum Token_value
{
	NAME,
	NUMBER,
	END,
	PLUS = '+',
	MINUS = '-',
	MUL = '*',
	DIV = '/',
	PRINT = ';',
	ASSIGN = '=',
	LP = '(',
	RP = ')'
}

Eleştiri[değiştir | kaynağı değiştir]

C# konusunda eleştiriler tabii ki var. En önemlisi using ile hangi referansları kullanacağımızı çok iyi bilmeliyiz. Ayrıca süslü parantez "{}" ve noktalı virgül ";" karakterlerini çok sevmemiz ve asla unutmamamız gerekmektedir.

Performans[değiştir | kaynağı değiştir]

  • Diğerleri gibi Sanal Makine'ye dayalı dillerden biridir, C# programlama dili direkt yerleşik kod'a derleyen dillerden daha yavaştır.[1].

Platform[değiştir | kaynağı değiştir]

  • .NET Microsoft uygulama bonservisi Windows üzerinde geçerlidir. Fakat C# programlarını Windows, Linux veya MacOs üzerinde yürüten başka uygulamalar da yer almaktadır. Mono (software) ve DotGnu [1].

Kaynakça[değiştir | kaynağı değiştir]

Dış bağlantılar[değiştir | kaynağı değiştir]