<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thexpot.net &#187; Oxygene</title>
	<atom:link href="http://www.thexpot.net/tag/oxygene/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thexpot.net</link>
	<description>C++ is a gift from sadists to masochists</description>
	<lastBuildDate>Wed, 16 Nov 2011 08:28:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Delphi&#8217;ye Oksijen lazım</title>
		<link>http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=delphiye-oksijen-lazim</link>
		<comments>http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 18:01:25 +0000</pubDate>
		<dc:creator>idursun</dc:creator>
				<category><![CDATA[Yazılar]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Oxygene]]></category>

		<guid isPermaLink="false">http://www.thexpot.net/?p=142</guid>
		<description><![CDATA[<a href="http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/" title="Delphi&#039;ye Oksijen lazım"></a>Delphi&#8217;nin hızlı yazılım geliştirmeye getirdiği kolaylıklar anlatmakla bitmez. 90&#8242;ların sonu ve 2000&#8242;lerin başında; saniyeler içinde derleme, tüm uygulamanın tek exe olarak çıkarılabilmesi, veritabanından arayüze data bağlamadaki kolaylıkları ve arkasındaki çok büyük bir komünite ile zirvedeydi diyebiliriz. Öncesinde Java, sonrasında .Net&#8217;in &#8230;<p class="read-more"><a href="http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/">Read more &#187;</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/" title="Delphi&#039;ye Oksijen lazım"></a><p>Delphi&#8217;nin hızlı yazılım geliştirmeye getirdiği kolaylıklar anlatmakla bitmez. 90&#8242;ların sonu ve 2000&#8242;lerin başında; saniyeler içinde derleme, tüm uygulamanın tek exe olarak çıkarılabilmesi, veritabanından arayüze data bağlamadaki kolaylıkları ve arkasındaki çok büyük bir komünite ile zirvedeydi diyebiliriz.</p>

<p>Öncesinde Java, sonrasında .Net&#8217;in gelmesi ve Borland-Inprise-Borland-CodeGear-Embarcadero arasında sekmesi sürecinde oldukça kötü delphi sürümleri (Delphi 8, Delphi 2005, Delphi 2006) arkası arkasına geldi ve Delphi popüleritesini kaybetti.
<span id="more-142"></span>
Son 2 yıldır Delphi ile yazılım geliştirmiyorum. Ben de soğudum fakat soğumamın nedini birbiri arkasında gelen hantal ve hatalı IDE&#8217;ler değildi. Yıllardır aynı yerde sayan Object Pascal&#8217;dı. Delphi, delphi olalı kullandığımız object pascal dili nerdeyse 90&#8242;lardaki ile aynıydı.</p>

<p>Pascal, okunabilirlik olarak iyi bir dildir fakat iş kodlamaya geldikçe dildeki bazı yapılar gerçekten sinir bozucu oluyor. Tabi rakipleri görmeden bu eksiklikleri tümüyle göremiyorsunuz. Bir kere görünce de görmemezlikten gelemiyorsunuz.</p>

<p>Object Pascal&#8217;ı ayrı köklerden geldikleri için C# veya Java ile karışlaştırmak doğru olmaz. Kendi klasmanında <a href="http://www.remobjects.com/product/?id={DC0A9947-5FED-4D34-8CC8-F2DCFA87A1FE}" target="_blank">RemObjects Oxygene</a> (eski adıyla Chrome) ile karşılaştırabiliriz.
<h3>Tüm değişkenleri var bloğunda tanımlamak</h3>
Delphi&#8217;de tüm değişkenler var bloğu içinde tanımlanmak zorundadır. Bu geçtim kod okunurluğunu kod yazımını düşürüyor. Her yeni değişken için yukarı çıkıp tanım yapmak aşağı gelip koda devam etmek gerekirki, bunu yapmazsanız code completiondan yararlanamazsınız.</p>

<p>Oysa oxygene&#8217;de buna gerek yok. Değişkeninizi kod içerisinde herhangi bir yerde tanımlayabilirsiniz. Type inference ise cabası&#8230;
<h3>Stringleri case içinde kullanamamak</h3>
Evet, case içinde string değerleri kullanamıyorsunuz.
<pre class="prettyprint">case name of
  &#39;ahmet&#39;:;
  &#39;metin&#39;:;
else
end;</pre>
Object Pascal&#8217;da yukarıdaki kodu derleyemezsiniz. Oxygene buna izin veriyor. Hatta yanlış hatırlamıyorsam bunu <a href="http://andy.jgknet.de/dlang/" target="_blank">Delphi Language Extension</a> adıyla bir projede de ele almışlardı.
<h3>Değer döndüren metotları &#8220;function&#8221;, döndürmeyenleri ise &#8220;procedure&#8221; anahtarı ile tanımlamak</h3>
En sinir olduklarımdan bir tanesi. Delphi&#8217;de eğer bir metod değer döndürecekse:
<pre class="prettyprint">function yap(a,b:integer):integer;</pre>
değer döndürmeyecekse
<pre class="prettyprint">procedure yap(a,b:integer):integer;</pre>
şeklinde tanımlamamamız gerekiyor. Bence çok gereksiz bir ayrım. Oxygene&#8217;deki gibi sadece <strong>method</strong> diyip geçebiliriz:
<pre class="prettyprint">method yap(a,b:integer):integer;
method yap(a,b:integer);</pre>
<h3>Generic ya da template gibi bir yapının olmaması</h3>
Delphi&#8217;de herhangi bir collection oluşturmak istediğimizde ya TList, TCollection ya da TStringList sınıflarından türetmemiz gerekiyor. Eğer bunu yapmazsak pointer&#8217;lara ve typecastlere uğraşmak zorundayız. Templateler C++ da zaten vardı. C#&#8217;a 2.0&#8242;da Java&#8217;ya ise 1.5 sürümlerinde templatelerden biraz daha farklı olan genericler eklendi. Sene 2009, Delphi&#8217;ye yeni ekleniyor. Oxygene&#8217;de bu özellik 1.0 sürümünden beri bulunuyor.
<pre class="prettyprint">Dictionary = public class
 ...
end;</pre>
<h3>foreach yapısının yetersizliği</h3>
Delphi&#8217;ye foreach yapısı 2006 sürümünde eklendi. En azından her loop için bir değişken ile for döngüsü yazmaktan kurtulduk. Fakat bazen foreach ile bir koleksiyonda ilerlerken bir de index&#8217;e ihtiyacımız olabiliyor. Oxygene bunu çok güzel bir şekilde aşmış:
<pre class="prettyprint">for each u in Users index i do begin
  if i &gt; 0 then Console.Write(&#39;;&#39;);
  Console.Write(u.Name);
end;</pre>
i değişkenini tanımlamama gerek yok, zaten index olduğu için integer olmak zorunda.
<h3>&#8216;try/except/finally&#8217; bloğunun olmayışı</h3>
Delphi&#8217;de try/finally ve try/except blokları mevcut ama bunları ayrı ayrı kullanabiliyoruz. try/except/finally olarak kullanamıyoruz. Bu Oxygene&#8217;de ise olması gerektiği gibi yapılmış.
<h3>return gibi bir keywordun olmayışı</h3>
Delphi&#8217;de bir fonksiyondan değer döndürmek için önce Result değişkenine atama yapar sonra da exit ile fonksiyondan çıkarız yani basit bir değer döndürme işlemini ancak iki adımda yapabiliriz. Oxygene&#8217;de ise bu işlemi tek adımda yapabiliyoruz:
<pre class="prettyprint">method sum(a,b:integer):integer;
begin
  exit a + b;
end;</pre>
Şimdiye kadar saydıklarım Delphi&#8217;de olması gerekipte olmayanlar, bir de olsa güzel olacaklar var, bunları da karşılıklı örnekler vererek size sunuyorum:
<h3>gelişmiş if</h3>
Delphi:
<pre class="prettyprint">if (0 &lt;= a) and (a &lt; 10) then</pre>
Oxygene:
<pre class="prettyprint">if 0 &lt;= a &lt; 10 then</pre>
Delphi:
<pre class="prettyprint">if not (a in &#91;1..10&#93;) then</pre>
Oxygene:
<pre class="prettyprint">if a not in &#91;1..10&#93; then</pre>
<h3>Oxygene&#8217;in en çok takdir ettiğim özelliklerinden birisi</h3>
node.Parent.Parent.Caption gibi bir değere ulaşmak istiyorsunuz fakat Parent değerleri null olabilir bu durumda Delphi&#8217;de (ve diğer dillerde) hepsini null kontrolünden geçirmek gerekir
<pre class="prettyprint">result := null;
if node &lt;&gt; null then
  if node.parent &lt;&gt; null then
   if node.parent.parent &lt;&gt; null then
     result := node.parent.parent.caption;</pre>
oysa Oxygene&#8217;de bunu tek satırda yazabilirsiniz:
<pre class="prettyprint">result:= node:parent:parent:caption;</pre>
eğer node veya parentlardan birisi null ise tüm ifade null döndürecek, değilse caption değeri dönecek.</p>

<p>Oxygene&#8217;in daha sayamadığım bir çok güzel özelliği var hepsini RemObject sayfasından inceleyebilirsiniz. Eğer Delphi&#8217;ye oksijen verilirse geri dönmesi işten bile değil, merakla beklemekteyim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thexpot.net/2008/09/delphiye-oksijen-lazim/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

