Programcılar İçin Yazarlık Dersleri 2

Programcılar için yazarlık dersleri devam ediyor.

Programcılar için yazarlık dersleri devam ediyor. Bu gidişle bu konuda kapsamlı bir kitap yazıp sizinle paylaşacağım.

Film yönetmenleri kendilerine gelen hikayeyi veya senaryoyu nasıl anlatacaklarına, hangi noktalara vurgu yapacaklarına, olayları nasıl sıralayacaklarına karar vermeden önce uzun çalışmalar yaparlar. Ne ki benzer çalışmayı programcılık üzerine yazanlar pek yapmıyorlar. Bildikleri konuları başlıyorlar anlatmaya. Tabi neyi nasıl anlatmak gerek sorusu üzerinde yeterinde kafa yormamış yazarların konuları anlatış şeklinin ve sırasının akıbeti çoğunlukla şans eseri kabul edilebilir olgunlukta oluyor. Bir önceki ders yani makaleyi okunabilir boyutta tutmak için kullandığım ölçülere göre 8. sayfada kesmiştim. Her ne kadar "yazdıklarım üzerine yazmak" çok zaman alsa bile Yazarlık Derslerini yazmayı sevdim. Belki C# 3.0 kitabımı baştan sona değerlendirip bir "Yazarlık Dersleri kitabı" hazırlarım.

Yazar Okurun İhtiyaç Duyduğu Tekniklere Mi Odaklanmalı?

Konu programcılık veya bir programlama dili üzerine yazmak olduğunda yazar temelde 2 kaygından etkilenir. Birinci kaygı; okurun muhtemel ihtiyaçlarını gözetip bilgi vermek ve çok kullanılan tekniklerden söz etmektir. Örneğin ADO.NET konulu bir kitap yazıyorsanız veya bir eğitim merkezinde hocalık yapıyorsanız okurların öğrencilerin hazırladıkları SQL Server veritabanını başka bilgisayara götürme ihtiyaçlarını öngörüp ona göre okuru ya da öğrencileri bilgilendirmeyi hedeflersiniz. Tabii okurların veya öğrencilerin konu programcılık olduğunda ileri ki günlerdeki muhtemel ihtiyaçlarının hepsini baştan öngörüp kitabın içeriğini oluşturmak mümkün olmadığına göre yazar kendince bazı seçimler yapar.

Yazarın veya hocanın programcılık anlatırken etkisinde kaldığı ikinci kaygı ise bazı kavramları veya işlemleri anlaşılabilir yapmak, okurun bu kavramları anlayabilmesidir. Eğer birincil amacınız programcılıkla ilgili bir kavramı, bir işlemi okurun veya öğrencinin anlaması ise, konuyu işlerken veya örnek verirken pratik değer aramaz, vereceğiniz örneğe okurun ileri ki günlerde ihtiyacı olur mu olmaz mı bakmazsınız. Örneğin .NET uyumlu programlama dillerinde Application sınıfı ile hiç ilgilenmeden profesyonel kalitede programlar yazmak mümkündür. Bu nedenledir ki birçok yerli yabancı kaynakta ya Application sınıfından söz edilmez ya da birkaç cümle ile geçiştirilir. Tabii Application sınıfının sık sık gerek duyulan bir kaç metodundan söz edilir ama bu söz etmede Application sınıfına vurgu yapılmaz. Örneğin uygulamanın çalışması sona erdirilirken gerek duyulan Exit() metodundan bir cümle ile söz edilir. Okurunuzu Application sınıfı hakkında mutlaka bilgilendirmek istiyorsanız belki de okurların hiçbir zaman kullanmaya gerek duymayacakları bazı işlemlerden söz edeceksiniz. Örneğin sanki Application sınıfı .NET Framework ile gelmiyormuş gibi davranıp, başka bir deyişle C++ programcıları gibi mesaj kuyruğu hazırlamak isteyebilirsiniz.

Gelelim bu derslerde sık sık atıfta bulunduğum C# 3.0 kitabıma: Bu kitapta zaman zaman anlattığım konunun kolay kavranmasını sağlamak için yaptığım veya anlattığım işlemlerin pratik değeri var mı yok mu göz ardı ettim. Örneğin Application sınıfı hakkında bilgi verilen bölümde birincil amaç Application sınıfı hakkında yazılanların anlaşılmasını sağlamak olduğundan zaman zaman pratik değeri olmayan işlemler yapılıp üzerinde konuşuldu. Örneğin .NET uygulamalarında Application sınıfının Run() metodu çok özel durumlar hariç yalnızca bir kez kullanılır. Run() metodunun işlevinin kavranması için henüz Application sonlanmamış iken Run() metodunu ikinci kez kullanılıp hata meydana gelmesine neden olup okurun konu üzerinde düşünmesi sağladım. Bu bağlamda yazarlara önerim şudur: Anlattığınız konu kolay anlaşılan ve arka planını bilmek gerekmeyen bir konu ise mümkünse verilen örneklerde pratik değer aranmalıdır. Anlatılan konu zor anlaşılan bir konu ise pratik değer kaygısı başlangıçta bir tarafa bırakılabilinir.

Ekran Görüntüleri Hangi Büyüklükte Olmalıdır?

1992 yılında dergilerde yayınlanan ilk yazılarımda ve 1994 yılında yayınlanan ilk kitabımda o günlerin kitaplarından farklı olarak ekran görüntülerine yer vermiştim. Memik Yanık'a hücum etmek isteyenlerin ilk enstrümanı şuydu: "Memik Yanık'ın kitaplarında ekran görüntülerinden başka bir şey yoktur". Şimdilerde bakıyorum da bırakınız ekran görüntüsüz programcılık kitabı bulmayı makale bulmak bile zor. Asıl sorun da tam burada başlıyor: Kitap metni içinde veya makalede ne sıklıkta ekran görüntüsü kullanılmalı, ekran görüntüleri hangi büyüklükteki olmalı, ekran görüntüsü sayfanın neresine konulmalıdır, okurun ekran görüntüsünü yazının parçasıymış gibi görmesi için neler yapılmalıdır? Bu gibi sorulardan "bi haber" olanların kitaplarında veya makalelerinde ekran görüntülerini işlevsel kullanabilmeleri şansa veya tesadüfe kalmıştır. İncelediğim birçok yerli yabancı kaynakta yazar ekran görüntülerini alıp kitaba konulmasını sağlamış. Ekran görüntüsünü alırken öyle özensiz davranıyorlar ki dikkatli incelerseniz şaşırırsınız. Örneğin yazarın birisi kitabında Visual Studio'nun ilk karşılaşılan penceresini okuruna göstermek için şöyle bir ekran görüntüsünü alıp kitabında kullanıyor.



Tabi bu ekran görüntüsünün orijinal genişliği çok fazla olduğu için ancak %50-60 oranında küçültüldüğü zaman kitaba sığabiliyor. Bu durumda ekran görüntüsünün üzerindeki yazıları ve pencere başlıklarını çıplak gözle okuyabilmek mümkün olamayacak. Memik Yanık tarafından kaleme alınan kitaplarda ise bu ekran görüntüsü aşağıdaki gibi olmaktadır. Tabi bu ekran görüntüsü kitapta fazla yer kaplamasın diye belli bir oradan küçültülüp öyle kullanılırdı.



Gerçekte yazdığım kitaplarda bu tip ekran görüntüleri daha küçüktür. Sanırım ne demek istediğim anlaşıldı. Ekran görüntüleriyle ilgili olarak yapılan bir başka yanlış ise şudur. Yazarımızın(yerli veya yabancı) MessageBox sınıfının Show() metodundan söz ettiğini varsayalım. Yazarımız kitabında muhtemelen aşağıdaki gibi bir ekran görüntüsü kullanır.



Dikkat edilirse bu ekran görüntüsü çok büyük değildir ve kitapta fazla yer kaplamaz. Birçoklarınıza bu normal gelir. Hal bu ki yukarıda verilen ekran görüntüsü %50-60 küçültülürken bu ekran görüntüsü olduğu gibi bırakılmış ve orijinal büyüklüğüyle kullanılmıştır. Yani ne büyütülmüş ne de küçültülmüştür. Bu ekran görüntüsü Memik Yanık tarafından yazılan bir kitapta kullanılsaydı aşağıdaki gibi olurdu. Çünkü Memik Yanık kitaplarında kullandığı bütün ekran görüntülerinin tümünü %30 ile 35 arasında değişen oranlarda küçültüp öyle kullanmaktadır. Çünkü Memik Yanık için en önemli parametre ekran görüntülerinin üzerindeki yazıların çıplak gözle ve gözlerinde bozukluk olmayanlar tarafından kolaylıkla okunabilmesidir.



Belki en doğrusu ekran görüntülerinin boyutları hakkında bilgi verirken yerli yabancı birkaç kitap kullanılan ekran görüntülerini buraya alıp üzerinde konuşmak olurdu. Ancak bu tercih Memik Yanık'ın suçlanmasına neden olurdu: Yazarlık dersi adı altında başka yazarların eksikliklerini bize anlatıyorsun derlerdi. Tam bu noktada bir yıl önce karşılaştığım trajik komik durumu size anlatacağım. Programcılık konulu bir forumda okurun birisi bir programcılık kitabı hakkında bilgi istiyordu; kitabı satın almadan forumun diğer üyelerinin görüşlerini almak istemişti. Konu dallanıp budaklanınca "söz konusu kitap elime geçince ciddi bir incelemeden geçirip fikirlerimi sizlerle paylaşırım" demiştim. Aradan henüz yarım saat geçmişken bir mail aldım: Maili gönderen söz konusu kitabı yayınlayan firmanın avukatıydı. Kitap hakkında konuşursam beni dava edeceklerini beyan ediyordu. Yani henüz görmediğim, içeriğinden haberdar olmadığım, tanımadığım bir yazarın kitabı hakkında ileri ki günlerde bir şeyler yazmam istenmiyordu. İşin garip tarafı bu mail bana ulaştıktan sonra birkaç ay sonra kitabı inceleme imkanım oldu. Baktım yazar konuya hakim ama bazı anlatım ve konuları sıralama sorunları var. Eğer ben o kitap hakkında yazsaydım adım gibi eminim ki yazar kitabının ikinci baskında büyük değişikliklere giderdi.

Şimdi ise 2. bir olayı anlatacağım. Bir gün bir yayınevinde oturuyordum. İçeriye kendisini tanımayıp ancak C üzerinde yazdığı kitaptan dolayı adını bildiğim bir yazar geldi. Tanışma faslından hemen sonra yazarımız gitti kitabının örneğini alıp geldi. Çünkü yakın bir zamanda kitabının yeni basımını hazırlamak istiyordu. Kitabında yapacağı ekleme veya çıkarmalar konusunda fikirlerimi almak istiyordu. Yarım saat içinde kitabının bazı sayfalarını inceledim kendisine önerilerde bulundum. Oldukça tecrübeli yazarımız bu önerileri tek tek not alıp gitti. Yarım saat içinde kitapta görebildiğim eksikleri, aksaklıkları tek tek saymıştım. Çünkü amacı kitabını daha iyi yapmaktı, amacı övgü duymak değildi.

Ekran Görüntüleri Nasıl Kullanılmalıdır?

Kitap metni içinde kullanılan ekran görüntülerinin büyüklüklerinden biraz söz ettikten sonra şimdi sırada ekran görüntülerini kullanma sıklığı ve işlevinin üzerinde biraz durmak gerekecek.

1995 yılında DOS ve Windows 3.1 ağırlıklı Herkes İçin Bilgisayar kitabımı yayınladığım günlerde bilgisayar ve programcılık kitaplarında ekran görüntüsü kullanımı pek yaygın değildi. Çünkü DOS ortamında ekran görüntüsü almak zahmetliydi. O zamanlarda kitaplarda ekran görüntülerine yer vermeme kimse bir şey dememişti. Bırakın itiraz edilmesini bu kitaplar okurlardan yoğun ilgi görmüştü. Ne zaman ki kitaplarımın sayısı fazlalaştı saldırılar başladı. Bazıları çeviri yaptığımı söylerken bazıları "kitaplarında ekran görüntüsünden başka bir şey yok" diyorlardı. Tabii bunları söyleyenler genelde Memik YANIK kitabı okumamış ve Memik Yanık kitaplarına ihtiyaç duymayan kişilerdi. Memik YANIK'a kızıyorlardı, bir konu hem de programcılık gibi teknik bir konunun bu kadar kolay öğrenilebilir olması insanları şaşırtıyordu. Neden Memik Yanık kitapları diğer yazarların kitaplarından daha kolay okunuyor, kolay anlaşılıyordu? Bu sorunun en kestirme cevabı; okuru ikna etmeye çalışırken karışık cümlelerden kaçınmak, yer yer ekran görüntülerini kullanmak, küçük tekrarlar yapmaktır.

Şimdi gelelim asıl konumuza. Yani ekran görüntüleri nerede nasıl kullanılmalıdır sorusuna cevap arayalım. Konumuz Delphi'de kod yazarak kontrolleri ilk yerleştirildikleri formdan başka bir forma taşımak olsun. Amacınız okurun hayal gücünü geliştirmek değilse yapmak istediğiniz işlemi veya amacımızı bir iki cümle ile ortaya koyduktan sonra 2 forma sahip bir Delphi projesi hazırlarsınız. Tabii kitabınızı şişirmeme gibi bir kaygınız varsa veya ekran görüntüleri konusunda özenli davranmayı ilke edinmişseniz kitap metni içinde ekran görüntüsü olarak kullanacağınız formların boyutlarına dikkat edersiniz.

Bazıları çıkıp diyecekler ki yukarıda bold yapılan cümle yeterince açık değil mi? Eğer okurunuz tıpkı üniversite seçme sınavındaki gibi konuya odaklanmışsa bu cümlenin yeterince açık ve anlaşılır olduğu söylenebilir. Daha doğrusu kolay okunma diye bir kaygınız yoksa veya hemen anlaşılma, hızlı okunma amaçlarınız yoksa yukarıdaki cümleden sonra formdan forma kontrol taşıyan Delphi kodunu verirsininiz olur biter. Bu durumda yazılanların programlama dilinin help metinlerinden bir farkı olmaz. Aşağıda verilen metni kendi cümlelerimle yazmış olmakla birlikte kaleme alırken başka yazarları taklit etmeye çalıştım. Konunun devamında ekran görüntülerini kullanıp kendi tarzımda anlatacağım.

Tam noktada Delphi ile ilgisi olmayan yazarlar ve yazar adayları için 2 cümle yazmam gerekiyor: Aşağıda hiç ilgilenmediğiniz, belki de bundan sonra hiç ilgilenmeyeceğiniz bir programla dili hakkında son derece teknik bir işlem hakkında bilgi verilmektedir. Bazı arkadaşlar tam bu noktada Delphi ile ilgili sayfaları atlayacaklardır. Nasıl ki lisede verilen matematik derslerinde ikide bir söylenip "türevin integralin hayatta bana ne faydası olacak, hangi işlemi yaparken kullanacağım?" diye fikirlerini beyan edenler bilim üretebilme becerisine sahip kişiler değillerse Delphi konulu bu metni okuma zahmetine katlanamayacak olanların iyi yazar olabilmeleri şüphelidir. Yazar olmak istiyorsan, yazdıklarım anlaşılsın istiyorsan öncelikle yabancısı olduğun konuları okuyabilme sabrını göstermen gerek. Üzerinde konuşacağım örnek metni metni italik yaptım.


Delphi'de bir formdaki nesneleri veya kontrolleri başka bir forma taşırken RemoveComponent ve InsertComponent metotları kullanılmaktadır. Form1'deki Edit1 ve Edit2'nin Parent özelliklerinde değişiklik yapılırsa Form2'nin üzerinde görüntülenirler.


procedure TForm1.AktarClick(Sender: TObject);

begin

  Edit1.Parent := Form2;

  Edit2.Parent := Form2;

end;

 

Şimdi ise Form2�de görüntülenen ilk 2 nesnenin silinmesini sağlayacağım. 

 

procedure TForm1.SilClick(Sender: TObject);

begin

  Form1.Components[1].Free;

  Form1.Components[0].Free;

end;



Bu 2 satır sayesinde Form1'deki ilk 2 kontrol silinir. Koda dikkat ederseniz Edit1 ve Edit2 nesneleri Form2'nin üzerinde görünürken bu kontroller henüz Form1'e aittir veya Edit1 ile Edit2'nin sahibi Form1'dir. Bu nedenle Free metodu ile silme işlemini yaparken Form2 yerine Form1'ın adını yazdım. Şimdi RemoveComponent ve InsertComponent metotlarını bir yordama alıp öyle işleteceğim.


procedure TForm1.Uzaklastir(Bilesen: TComponent; Sahip: TComponent);

begin

  Bilesen.Owner.RemoveComponent(Bilesen);

  Sahip.InsertComponent(Bilesen);

end;



"Uzaklastir" adını verdiğim yordamı bu şekilde hazırladıktan sonra aşağıdaki gibi hazırlık yaptım. Bu kod sayesinde Form1'deki 2 Edit Form2'ye aktarılır.


procedure TForm1.AktarClick(Sender: TObject);

begin

  Form1.Edit1.Parent := Form2;

  Form1.Edit2.Parent := Form2;

  Uzaklastir(Edit1, Form2);

  Uzaklastir(Edit2, Form2);

end;



Aslında bu metin Delphi konusunda ortalama bilgiye sahip olanlar için son derece anlaşılırdır. Ne ki Delphi uzmanları dönüp bu metne bakmazlar bile. Onların burada yazılanları anlamaları için metindeki kod satırlarına uzaktan bir kaç saniye bakmaları yeterlidir. Biz yazarlar uzmanlar için kitap yazmadığımız için, başka bir deyişle yazdıklarımızla hiç ilgilenmeyecekleri baştan belli olanları gözeterek konuları kaleme almadığımız için uzmanların böyle bir metin karşısındaki yaklaşımlarını ölçü almayız. Hemen söyleyeyim ki yukarıda verilen kısacak metin ve birkaç satırlık kod Delphi'nin bileşen kavramının temelini oluşturuyor. Bu nedenle oldukça önemlidir. Önemli olduğu için de okurun yazılanları kavraması için ek açıklamalar yapılmalıdır. Üstelik bu ek açıklamalar pat diye yapılmamalıdır. Okur öncelikle olası sorunlarla yüz yüze getirilmelidir. Okur formlar arası nesne taşıma konusunda karşılaşacağı sorunlar hakkında bilgi sahibi yapıldıktan sonra çözümden söz edilmelidir.

Bu metni okuyan kişi Delphi uzmanı değilse(ki Delphi uzmanı zaten böyle bir metne dönüp bakmaz) yapılan işlemlerin geri planını merak eder. Belki de işin içinden çıkamaz. Bu konu bu şekilde anlatıldığı zaman anlaşılmama olasılığına karşı, başka bir deyişle anlaşılmayı garanti etmek için bu konuyu aşağıdaki gibi anlatmayı tercih ettim. Bir kez okursunuz, hem de hızlıca okursunuz ikna olmuş, konuyu kavramış halde başka konuya geçersiniz.

Delphi hakkında ortalamanın üzerinde bilgisi olan birisi bu metni gördüğünde büyük bir ihtimalle "yazar için kitabı şişirmiş, sayfaları ekran görüntüleri ile doldurmuş" diyecektir. Programcılığı meslek olarak seçmiş olanların ve programcılık üzerine yazanların gözden kaçırdıkları önemli bir nokta var: Programcılar hayal güçleri olağanüstü kişiler değildir. Bu nedenle zaman zaman ekran görüntülerine yer verip konudan kopmalarının önüne geçmek gerekir.

Nesneleri Bir Formdan Diğerine Taşımak

Delphi projelerinde bir formdaki kontrolleri başka bir forma taşırken RemoveComponent ve InsertComponent metotları kullanılmaktadır. Bu 2 metodun nasıl kullanıldığını anlatmak için 2 forma sahip bir proje hazırladım.



Bu ekran görüntüsü kitap veya makale metni içinde yaklaşık 5 satırlık yer kaplamaktadır. Başka bir deyişle kitapta bu büyüklükte bir ekran görüntüsüne yer verildiği zaman kitap metni 5 satırlık bir paragraf kadar artmış olur. Yazarın bu ekran görüntüsünü 2 satırda tarif edeceğini düşünürsek kitapta bu ekran görüntüsüne yer verilmekle gerçekte kitap metni 3 satır kadar artmış oluyor. Çünkü yukarıda verdiğim metne bakarsanız "2 forma sahip proje hazırladım" demekle yetindim. Eğer ekran görüntüsüne yer vermeseydim okurun hayal gücüne yaslanıp ekran görüntüsü verilen 2 formu uzun uzun tarif etmem gerekecekti. Tabi bazı yazarlar özensiz davranıp sanki artı bir faydası olacakmış gibi ekran görüntülerini kocaman kocaman alıyorlar sonra da küçültüyorlar. Bu durumda ekran görüntüsündeki yazıları okumak için büyütece gerek duyuluyor.

Çalışma anında ilk formdaki "Göster" düğmesi tıklandığında "Form2" ekrana getirilecek. Bu amaçla Unit2'yi Uses bloğunda Unit1'e dahil ettikten sonra "Goster" düğmesi için aşağıda verdiğim kodu yazdım.


procedure TForm1.GosterClick(Sender: TObject);

begin

  Form2.Show;

end;



Çalışma anında "Aktar" düğmesi tıklandığında Edit1 ve Edit2'nin Parent özelliklerinde değişiklik yapılıp Form2'nin üzerinde görüntülenmesini sağlayacağım.


procedure TForm1.AktarClick(Sender: TObject);

begin

  Edit1.Parent := Form2;

  Edit2.Parent := Form2;

end;



Aşağıda verilen ekran görüntüsünü önce 'Göster', sonra 'Aktar' düğmelerini tıkladıktan sonra aldım. Bu sırada Edit1 ve Edit2 projedeki 2. formun üzerinde görünüyor olsalar bile bu 2 nesnenin sahibi henüz Form1'dir.



Gerçekte tam bu noktada Delphi programcıları için önemli bir konu var: Edit nesneleri Form2'nin üzerinde görünürken sahibi henüz Form1'dir. Bu ekran görüntüsü sayesinde okurun bu önemli noktaya dikkati çekilmektedir. Bu ekran görüntüsü kullanılmasaydı okur belki aynı metni 2 kez okumak zorunda kalacaktı.

Çalışma anında "Sil" düğmesi tıklandığında Form2'de görüntülenen ilk 2 nesnenin Form1'den silinmesini sağlayacağım. Bu amaçla ilk formdaki "Sil" düğmesinin Click olayıyla ilgili metodu aşağıdaki gibi düzenledim.


procedure TForm1.SilClick(Sender: TObject);

begin

  Form1.Components[1].Free;

  Form1.Components[0].Free;

end;



"Sil" düğmesinin Click olayını temsil eden metoda yazılan bu 2 satır sayesinde Form1'deki ilk 2 kontrol silinir. Koda dikkat ederseniz Edit1 ve Edit2 nesneleri Form2'nin üzerinde görünürken bu kontrollerin henüz Form1'e aittir veya Edit1 ile Edit2'nin sahibi Form1'dir. Bu nedenle Free metodu ile silme işlemini yaparken Form2 yerine Form1'ın adını yazdım. Burada yapılması gereken Parent özelliği ile nesnenin görüntülenmesinden sorumlu olacak formu değiştirdikten sonra Owner özelliğini de değiştirmektir. Bu işlemi yapmak için aşağıda verdiğim kodu yazdım.


procedure TForm1.AktarClick(Sender: TObject);

begin

  Form1.Edit1.Parent := Form2;

  Form1.Edit1.Owner.RemoveComponent(Edit1);

  Form2.InsertComponent(Edit1);

  Form1.Edit2.Parent := Form2;

  Form1.Edit2.Owner.RemoveComponent(Edit2);

  Form2.InsertComponent(Edit2);

end;



Bu kod hakkında bilgi vermeden bu kodun hataya neden olacağını söylemeliyim. Bu kodda önce Form1'deki 'Edit1' nesnesi RemoveComponent metodu ile Form1'den uzaklaştırılıp InsertComponent metodu ile Form2'ye eklenmektedir. Ancak Edit'ler ve diğer nesneler RemoveComponent metodu ile Form1'den uzaklaştırıldığı anda bellekten silinmiş olmaktadır. Dolayısıyla olmayan bir nesneyi InsertComponent metoduna parametre olarak vermek hataya neden olur.

Bu sorunu gidermek için ilk akla gelen yöntem bu işlemi yapacak bir procedure hazırlamaktadır. Daha önce Türkiye'de yayınlanan bir kitapta bu yöntem anlatıldığı için öncelikle söz konusu Edit nesnesini RemoveComponent metodu ile Form1'den uzaklaştırmadan önce bir değişkene aktaracağım.


procedure TForm1.AktarClick(Sender: TObject);

Var 

   E :TEdit;

begin

   Form1.Edit1.Parent := Form2;

   E := Form1.Edit1;

   Form1.Edit1.Owner.RemoveComponent(Edit1);

   Form2.InsertComponent(E);

   Form1.Edit2.Parent := Form2;

   E := Form1.Edit2;

   Form1.Edit2.Owner.RemoveComponent(Edit2);

   Form2.InsertComponent(E);

end;



Bu kod sayesinde Edit1 ve Edit2'nin Form1 ile bir ilişkisi kalmaz. Bu kod işletildikten sonra Edit1 ile Edit2'nin hem Owner'ı hem de Parent'ı Form2 olur. Bu şartlarda, yani Form2'de yalnızca 2 nesne varken 'Sil' düğmesi için yazılan kodda önce Edit2 silinmelidir yoksa hata meydana gelir.


procedure TForm1.SilClick(Sender: TObject);

begin

  Form2.Components[1].Free;

  Form2.Components[0].Free;

end;



Şimdi ise RemoveComponent ve InsertComponent metotlarını bir metoda alıp öyle işlete¬ceğim. Hazırlayacağım metot TComponent tipinde 2 parametreye sahip olacaktır.


procedure TForm1.Uzaklastir(Bilesen: TComponent; Sahip: TComponent);

begin

  Bilesen.Owner.RemoveComponent(Bilesen);

  Sahip.InsertComponent(Bilesen);

end;



'Uzaklastir' adını verdiğim metodu bu şekilde hazırladıktan sonra 'Aktar' düğmesinin Click olayını temsil eden metodu aşağıdaki gibi düzenledim. Bu kod sayesinde Form1'deki 2 Edit Form2'ye aktarılır.


procedure TForm1.AktarClick(Sender: TObject);

begin

  Form1.Edit1.Parent := Form2;

  Form1.Edit2.Parent := Form2;

  Uzaklastir(Edit1, Form2);

  Uzaklastir(Edit2, Form2);

end;



Birinci anlatım daha kısa oldu. Delphi konusunda belli bir düzeye gelmiş kişilere, daha doğrusu artık kitap almayıp, Memik YANIK veya başka bir yazar tarafından kaleme alınmış metinlere dönüp bakmayanlara göre kısa olanı tercih etmek gerekir. Nasıl olsa onların bu konuyu öğrenme gibi bir dertleri yok. Yazar arkadaşım fazladan yazılan her kelime her cümle okur için zaman kaybıdır, kitabınızdan alınacak faydanın azalmasıdır. Ne ki vur deyince öldürmemek gerekir, metin kısa olacak diye okunması zor, okunsa bile söylenenler anlamak zahmetli oluyorsa durup düşünüp metni yeniden kaleme almak gerekir.

Kod İçinde Açıklama Metni Kullanmak

Bazı yerli yabancı yazarlar makalelerinde ve kitaplarında kullandıkları 15-20 satırlık yani yarım sayfalık kodun içine uzun uzun açıklamalar yerleştirerek söz konusu kodun 1,5-2 sayfa kadar uzamasını tercih ediyorlar. Kodun arasına uzun açıklamalar ekleyerek kolay anlaşılmak veya kodda kullanılan her satırın işlevinin okur tarafından hemen fark edilmesini istiyorlar. İlk bakışta sanki doğru bir terciymiş gibi görülür bu. Böyle bir tercih ile hazırlanan metni okumak bir bakıma dublajı bilmediğiniz bir dilde yapılmış olup bol konuşmalı alt yazılı bir filmi izlemeye benzer. Hele hele filmdeki karakterler hızlı konuşuyorlarsa bazen de aynı anda birden fazla kişi konuşuyorlarsa bütün alt yazıları okuyup filmi anlamak ağır bir işte çalışmak gibi yorucudur. Yani yazarlarımız kodun içine bol bol açıklama metni koyarken sanıyorlar ki okur konuyu daha kolay anlıyor, kodda yapılan işlemleri bir bakışta kavrıyor.

Yıllardır yüz binlerce programcılık konulu sayfa okumuş birisi olarak söylemek isterim ki kodun içinde uzun açıklamalar yapmak kadar metni zor okunur yapan başka bir teknik yoktur. Elbette kodun içine açıklama metni yazılır, elbette dozunda tutulmuş açıklama metninin okura katkısı olur. Burada dikkat edilmesi gereken açıklama metinlerin kısa olması ve sayılarının fazla olmamasıdır.

Yazarın birisi daha önce hakkında hiç söz etmediği bir kavram veya anahtar kelime hakkında kodun içinde 3 satırlık yani neredeyse bir paragraflık açıklama metnine yer veriyor. Devamında bir sonraki kod satırı için tekrar açıklama metni kullanıyor. Başka bir deyişle kod satırları, kod satırlarını açıklayan metinlerin içinde kayboluyor.

Açıkçası hazırladığınız 10 satırlık kodun 5-6 satırı için kod içinde açıklama metni hazırlıyorsanız okurunuzu o kod için hazırlamamışsınız, okurunuz o kodda kullanılan sınıflar, metotlardan ve anahtar kelimelerden henüz habersizdir. Yapılması gereken; kodda kullanılan sınıflar, anahtar kelimeler hakkında önceden okura bilgi verip ondan sonra kod hazırlamaktır. Kod içinde kullanılmasına rağmen daha önce söz edilmeyin veya okurun unutmuş olabilme ihtimali yüksek bir iki metot hakkında en fazla 3-4 kelimelik açıklama metinleri yararlı olabilir.
  • Etiketler;
Memik Yanık
Hakkında bilgi yakın zamanda eklenecektir.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

abi vala ben yeni bilgisayar mühendisliğin kazanmışım.umarım bu sitedeki bilgiler zamanla bana çok yarar ama...açıkçası hepsini tam anlamıyorum.acaba bölüme başlayınca bir çok şeyi anlatacklar mı? ben yeni kazanmışım ama lise 1 deki çocu dahi benden daha ii bilgisayar bilio.galiba doğuda olmamın bedeli bu olsa gerek...bu bölümü kazanmışım o şartlarda şimdi bu gibi basit şeylerdenmi yenileceğim diyesim gelio bana ama yinede bir korku var içimde.Allahım bana yardım et.ne olur sizde bana yrdm edn
allah yardımcn olsun :D
allah yardmcın olsun
memik bey ben lise bt öğrencisiyim vb.net görüyorum veri uygulamaları hakkında bilgi verirmisinz rica etsem verirseniz beni çok mutlu etmiş olursunuz..teşekkürler

Yukarı Git