C# ile Tanışalım.
C# web programlama için yeni bir sayfa, ve öğrenilecek çok şey barındırıyor içerisinde.. Temel sözdizimi özellikleri basit örneğiyle birlikte bu makalede..
Microsoft ''un Visual Studio.NET paketi ve .NET Framework teknolojisi ile birlikte sunumunu yaptığı yeni programlama dili C# (Si şarp), çok bilinmeyenli denklem görünümünden dolayı bu yeni teknolojinin en çok ilgi çeken kısımlarından birisi oldu. Dile kolay; yepyeni bir programlama dilinden bahsediyoruz. İsmiyle, sözdizimiyle ve genel yapısıyla C/C++ ''tan türetilmiş olan C# atalarından daha modern olmakla kalmayıp daha yenilikçi olmayı ihmal etmiyor. Tamamıyla nesne yönelimli..
.NET Framework ile sunulan dört .NET programlama dilinden biri olan C#, aynı VB.NET gibi rahatlıkla ASP.NET uygulamalarında kullanılabiliyor. Ayrıca ASP.NET kodu yazmak için C# kullanmayı tercih eden web programcısı tüm Ana Sınıf Kütüphanesi''ni (Base Class Library) elinin altında bulmaya devam ediyor. Yani C# ile VB.NET ASP.NET gözünde eşitler. Herhangi birisine torpilli davranılmıyor veya kısıtlama getirilmiyor.
Bu durumda bu yeni dili de öğrenip ASP.NET sayfalarımızda kullanmamamız için hiçbir neden yok. Madem Microsoft ilk aşamada dört, ve sonradan +1( J# ) alternatif sunup "alın istediğinizi kullanın" demiş, fırsatı iyi değerlendirip mümkün mertebe diğer dillere de göz atmalı, VBScript ''e olan göz alışıklığımızdan dolayı bize daha kolay gelen VB.NET ile sınırlı kalmamalıyız. Klasik ASP ''deki script dilli günleri geride bıraktık. Artık birden fazla dilimiz ve renkli yayınımız var.
Peki, C# öğrenmeye nerden başlayabiliriz ? Önce "programlama dili öğrenmek" kavramı konusuna açıklık getirmek lazım bu noktada. Bir programlama dilini öğrenmekten tam olarak ne kastedilir ? Herşeyiyle öğrenmek mi, yoksa sözdizimini öğrenip fonksiyonlar yazabilecek, diziler kullanıp dolar kuru hesaplayabilecek programlama yapmayı öğrenmek mi ?
Tüm programlama dillerinde öğrenci adayları için öğrenilecek şey çok fazladır. 7 veya 21 günde dili öğretmeyi vaat eden öğreticiler (tutorial) dile vakıf olmanızı değil sınırlı bir alanda özellikleri, metodları kullanacak bilgiyi edinmenizi sağlar. Bizim bu ve ileriki makalelerde öğrenmek istediklerimiz; C# ''ı ASP.NET sayfalarımızı programlamayabilecek kadar öğrenip sıkıntı çekmeden istediğimiz yapabilecek bilgi olacak. Ayrıntıya girmeden, kafa karıştırmadan C# ''ı en verimli şekilde kullanmaya çalışacak ve bir nevi birlikte dalacağız bu yeni denize.
Kabul edersinizki geçmişi olmayan bir insan ilk denemede çok derine dalarsa bu onun son dalışı olabilir. İşte bu nedenle yavaş ilerleyecek ve önemli konuları x,y,z düzleminde irdeleyeceğiz. Herşeyi hazmederek öğreneceğiz ki unutması zor olsun. Sanırım giriş için bu kadar söz yeter, laf kalabalığı yapmadan artık C# ''a giriş yapalım.
Şimdi kısa bir kod vererek 4 madde halinde verdiğim temel sözdizimi özelliklerine örnek veriyorum.
<%@ Page Language="C#" Debug="True" %>
<script runat="server"> void Page_Load(Object Source, EventArgs E) { int iDegiskeni; // Tek satır yorum /* Bu değişkeni kullanırken idegisken şeklinde çağırmak istersek hata alırız. */ for (iDegiskeni=0 ; iDegiskeni <= 5 ; iDegiskeni++) { // Response.Write deyimini nasıl yazdım ? Response.Write("sayı = " + iDegiskeni.ToString() + "<br>"); } } </script> |
Verdiğim bi C# kodu bazılarınız için çok tanıdık gelse bile bazılarınız içinse çok karmaşık ve yabancı geliyor olabilir. Kendi tecrübemden biliyorumki uzun süre Visual Basic ile ahbaplık etmiş (veya VBScript) bir insan C# sözdizimini (syntax) gördüğünde tam anlamıyla dumura uğrar. Bu durum C# öğrenmekten vazgeçmeye neden olabilir. Çünkü iki programlama dilinin sözdizimleri arasında gözle görülmeyi bırakın kendini gösterir farklar vardır.
C# sözdiziminin en çok dikkat çeken ve belki de en güzel özelliklerinden birisi (bence) işaretlerin ağırlıklı olması kelimelerin ise sadece deyimlerin anahtar kelimesi olarak yer almasıdır. 500 satırlık bir Visual Basic kodunun C# ile yazıldığında 300 satıra düşmesi işten bile değildir.
C# ''ın Ansi C ''den devraldığı ekstra özellikli operatörlerle tamsayılar için "artırma", "eksiltme" gibi işlemler hem daha az tuş basılarak yazılabilir. Hem de derleyici bu konu daha hızlı çalıştırır.
Yukarıdaki C# koduna bakıp sözdizimine yabancı olanlar ilk bakışta değişken bildirimlerini farketmişlerdir. Visual Basic ve VBScript ''tekinin aksine çok daha az kelime kullanarak yapılan bu değişken deklaresi hem iDegiskeni isimli integer (tamsayı) türlü değişkenin tanımlanmasında, hem de page_load rutininin parametrelerinin bildirilmesinde görülebilir.
C# ''da değişken bildirimleri değişken_tipi değişken_ismi; şeklinde yapılır. Aynı türde bildirimi yapılacak diğer değişkenlerde virgüllerle ayrılarak aynı satıra yazılabilir. Bir değişkene bildirimi sırasında değer atanmak istenirse değişken_tipi değişken_ismi = değer; sözdizimini kullanılır.
Rutinler ve fonksiyonların türleri fonksiyon başlıklarında belirtilir. Void kelimesinin anlamı "boş" ''tur. Rutinin değer döndürmeyeceği anlamına gelir. Program void bir rutin veya fonksiyondan değer beklemez. Ancak dikkat edilmesi gereken bir nokta olarak; bu anahtar kelimenin tamamı küçük harf olacak şekilde yazılması gerekir. Benim, cümlenin başında baş harfi büyük olarak yazdığım gibi yazılırsa compile-time (derleme-zamanı) hatası alınır.
C# ''ın case-sensitive olduğunu söylemiştim. Ancak bunun örneğini değişken isminde gösterip blamıştım. Verdiğim kodda case-sensitive olması açısından çok önemli bir yer daha var. Yorumda da belirttiğim gibi Response.Write deyiminin yazılışı.. Neden çok önemli ? Bu kodu ".aspx" uzantılı bir dosyaya kaydedin ve çalıştırın. Çalışacaktır. Şimdi Response.Write satırını response.write olarak değiştirin. Dosyayı tekrar çalıştırın. Compile-time hata alacaksınız. Neden ?
Case-sensitive olmayan bir ortama alışkın olanlar böyle bir hatayı bu makaleyi okumadan yaptıklarında sorunun içinden çıkmakta çok zorlanırlar ve belki de uzun bir zamanı monitörü parçalama isteğiyle harcarlar. Aslında çok küçük bir küçüklük-büyüklük hatası olan bu sorun uygulamanın çalışmasını engeller.
Nasıl değişkenlerin bildirildiklerindeki gibi yazılmaları gerekiyorsa, C# ''ın anahtar kelimelerinin de orjinal halleriyle yazılmaları gerekir. Response.write şeklinde bir kullanım sonucu Response nesnesinde write isimli bir tanımlama olmadığı hatası alınır.
Sanırım C# ''ın temel sözdizimi ile ilgili ipuçlarını yeterince açıklayabildim. İlk C# makalemde çok fazla ayrıntıya girmemek, ve temel konuları blamak için özen gösterdim. Belki for döngü deyimini kullandığım halde açıklamadım. Ama kodu renklendirecek bir ortamda bir süre incelerseniz birçok noktayı daha anlayabileceğinize inanıyorum. Benim verdiğim temel özellikleri hatırlayıp, birçok deyimin de bu şekilde yazılacağını unutmayın.
Daha ileri seviye C# makalelerinde görüşmek üzere..
.NET Framework, programcılara aşina olduğu kod dilini kullanma özgürlüğü tanıyarak bir devrim gerçekleştirdi. Ve, belli belirtimlere sadık kalındığı sürece, farklı dillerle yazılmış uygulamaların birbiriyle etkileşebileceğinin de teminatını verdi. Nasıl mesela? Mesela, A programcısı X diliyle bir Class yazıyor; B programcısı, Y diliyle bu Class'ı devralan (inheritance) yeni bir Class yazıyor. Böylece hangi programcının, hangi dili kullandığı sadece ayrıntı olmaktan öte bir anlam taşımıyor.
Evet, .NET diller arası etkileşime olanak tanıyan, bir çok dile destek veren bir platform. Üçüncü parti derleyiciler yazılarak .NET için her an yeni bir dil daha yazılabilir. Ama herşeyden önce, .NET'in beraberinde sunduğu dillere bakmak gerekiyor. Bu diller 4 tane: C++, Visual Basic .NET, C# ve JScript.NET. Dikkat edilirse bu listede, "ben yeniyim" diye göz kırpan bir tanesi var. Yazımızda, bu yeni dili tanımaya çalışacağız.
Komut satırı C# Derleyicisi (csc.exe) hakkında
C# derleyicisi (csc.exe), .cs uzantılı dosyalara kaydedilen C# kaynak-kodlarını IL (Ara Dil - Intermediate Language) koduna çevirerek .dll veya .exe uzantılı assemblyler olarak kaydeder. Bu derleyici, .NET Framework'un 21 mb boyutundaki dokumantasyon ve ek araçlar içermeyen dağıtılabilir kurulumunda da mevcuttur ve bedavadır. .NET Framework kurulumu için http://msdn.microsoft.com/net adresine bakınız.
Sisteminizde .NET Framework kurulu ise, C# komut satırı derleyicisi olan csc.exe yi
%WINDOWS_DIZINI% Microsoft.NET Framework vX.X.XXX dizini altında bulabilirsiniz. X karakterleri yerine sistemde kurulu framework sürümü gelecektir. Benim sistemim için bu patika şöyle: D:WINNTMicrosoft.NETFrameworkv1.0.3705
Bu dizin altında C# derleyicisinin yanısıra diğer derleyicileri de bulmanız mümkün (vbc.exe, jsc.exe). Bu dizindeki derleyicileri, komut satırında herhangi bir mantıksal noktadan, sadece dosya ismini yazarak kullanarak büyük bir konfor sağlamak istiyorsanız, bu patikayı, sistemin "search path" listesine eklemelisiniz. Aşağıdaki komut yeterli olacaktır:
Set Path=D:WINNTMICROS~1.NETFRAMEW~1V10~1.370;%PATH%
Böylelikle, her noktadan VB.NET, C# ve JS.NET derleyicilerine ulaşabileceksiniz. Yazımızın ilerleyen bölümlerinde bir derleme örneği vereceğiz. O zaman daha iyi anlaşılacaktır.
C#, tasarlanırken C/C++'ın gücü ve Visual Basic'in kolaylığı ve verimliliği birleştirilmiş. Bu dili tasarlayan ekibin başında ise, yine Turbo Pascal ve Borland Delphi gibi efsanelerin yaratımını yönetmiş Anders Hejlsberg var. Kendisi ile C# hususunda yapılmış bir mülakatı okuyabilirsiniz.
C# kaynak-kod dosyalarını .cs uzantılı dosyalarda saklıyoruz. Bir .cs dosyası oluşturmanız için gereken minimum araç sadece bir metin editörü: Not defteri, EditPlus, UltraEdit, vs. Şu gerçeği unutmayalım: tüm .NET uygulamalarını sadece basit metin editörü kullanarak oluşturmak mümkün. Kendinize güveniyorsanız, Visual Studio .NET gibi tasarım harikası bir dosta hiç ihtiyacınız yok.
C#'ın nesne yönelimli bir dil olduğunu söylemiştik. Bu nedenle, her C# kodunda bir class tanımı görmeniz doğaldır. Aşağıda, derlendiğinde kendi başına (stand-alone) bir konsol uygulaması olarak çalışabilecek bir C# kodu var. Kodumuz bir class bünyesinde statik Main() fonksiyonu içeriyor. Fonksiyon içerisinde, konsola yazı gönderilmektedir.
merhaba.cs | |
class IlkProgramIlkHeyecan
{ public static void Main() { System.Console.Write("Merhaba C#"); } } |
Bu kodu, merhaba.cs uzantılı bir dosya olarak herhangi bir dizine kaydedin. Eğer, yukarıdaki ara-açıklamada bahsettiğim, derleyici için path ayarlarını yaptıysanız, komut satırında merhaba.cs nin bulunduğu dizine geçip aşağıdaki komutu verirseniz, merhaba.cs'yi başarıyla derleyebileceksiniz.
Komut satırından derleme komutu | |
csc /out:merhaba.exe merhaba.cs
|
Derleyicinin Cevabı | |
Microsoft (R) Visual C# .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.0.3705 Copyright (C) Microsoft Corporation 2001. All rights reserved. |
Bu komut, aynı dizinde merhaba.exe dosyasını üretecektir. Şimdi yine komut satırından aynı dizinde merhaba yazarak bu programı çalıştıralım:
Bu program kodunu aşağıdaki şekilde de yazmak mümkündü:
using System;
class IlkProgramIlkHeyecan { public static void Main() { Console.Write("Merhaba C#"); } } |
Görüldüğü gibi, C# söz dizimi olarak çok da yeni bir şey getirmiyor. Daha önce C, C++, Java, JavaScript veya PHP gibi dillerle ilgilenmiş olanlar, C# sözdizimine kolaylıkla adapte olacaklar. Bunlar arasında C#'ı, özellikle Java geliştiricileri kendilerine çok yakın bulacaklar. Bu benzerliğin tesadüf olmadığı bir gerçek.
C# dilinin yapısıyla ilgili ayrıntılara sonraki yazılarımızda değineceğiz. Şimdi bir de C#'ı ASP.NET uygulamalası içinde görelim.
csharp.aspx | |
<Script Runat="server"> void Page_Load ( Object sender, EventArgs e ) { int i=0; Kisiler[] arKisiler = new Kisiler[3]; for ( ; i<3 ; i++) { arKisiler[i] = new Kisiler(); arKisiler[i].isim = "Kisi_" + (i+1); arKisiler[i].mail = "Mail_" + (i+1); } rpt.DataSource = arKisiler; rpt.DataBind(); } public class Kisiler { private string _isim; private string _mail; public string isim { get { return _isim; } set { _isim = value; } } public string mail { get { return _mail; } set { _mail = value; } } } Script> <html> <body> C# ve ASP.NET Buluşması<br><br> <asp:repeater id="rpt" runat="server"> <ItemTemplate> <br> ItemTemplate> asp:repeater> body> html> |
İsim ve Mail şeklinde sadece iki alana sahip bir sınıf tanımı yapıyoruz. Sayfanın OnLoad olayına yazdığımız fonksiyonda ise, elemanları bu sınıftan oluşan bir dizi tanımlayıp, dizinin elemanlarına değer araması yapıyoruz. Ve HTML alanı içerisinde tanımladığımız Repeater web kontrolünün DataSource özelliğine bu diziyi işaret ediyoruz. Repeater'in DataBind() metodu ile dizideki veriyi listelemiş oluyoruz.
İyi çalışmalar.