<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ALL THINGS LAZARUS</title>
	<atom:link href="http://lazarustutorial.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lazarustutorial.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Sat, 15 May 2010 05:50:04 +0000</lastBuildDate>
	<language>ar</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='lazarustutorial.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ALL THINGS LAZARUS</title>
		<link>http://lazarustutorial.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://lazarustutorial.wordpress.com/osd.xml" title="ALL THINGS LAZARUS" />
	<atom:link rel='hub' href='http://lazarustutorial.wordpress.com/?pushpress=hub'/>
		<item>
		<title>الإستثناءات</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a5%d8%b3%d8%aa%d8%ab%d9%86%d8%a7%d8%a1%d8%a7%d8%aa/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a5%d8%b3%d8%aa%d8%ab%d9%86%d8%a7%d8%a1%d8%a7%d8%aa/#comments</comments>
		<pubDate>Thu, 07 May 2009 03:08:36 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[fpc]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=35</guid>
		<description><![CDATA[الفصل الثامن الإستثناء هو حدوث شئ مخالف للمسار الطبيعى للبرنامج فنقوم بوضع ترتيبات خاصة لمعالجة هذه الحالات على سبيل المثال لدينا موظف وقمنا بتحديد المرتب له الى 0 او قمنا بقسمة عدد ما على 0 او نحاول فتح ملف غير موجود او او او على سبيل المثال type THuman=class(Tobject) Constructor Create(aName: String); private fName: String; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=35&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل الثامن</strong></p>
<p><strong>الإستثناء </strong>هو حدوث شئ مخالف للمسار الطبيعى للبرنامج فنقوم بوضع ترتيبات خاصة لمعالجة هذه الحالات على سبيل المثال لدينا موظف وقمنا بتحديد المرتب له الى 0 او قمنا بقسمة عدد ما على 0 او نحاول فتح ملف غير موجود او او او </p>
<p>على سبيل المثال</p>
<pre class="brush: delphi;">type
     THuman=class(Tobject)
        Constructor Create(aName: String);

        private
               fName: String;
              Function GetName: String;
              Procedure SetName(aName: String);

        public
              property Name: String read GetName write SetName;
              procedure PrintMe; virtual;
              class procedure About; virtual;

     end;

     { TEmp }

     EValueError=class(Exception);
     TEmp=class(THuman)
         Constructor Create(aName:String; aSalary: Integer);

         private
                fSalary: Integer;
                Function GetSalary: Integer;
                Procedure SetSalary(aSalary: Integer);

         public
               property Salary: Integer read GetSalary write SetSalary;
               procedure PrintMe; override;
               class procedure About; override;
               class Function GetNHumans: Integer;
     end; </pre>
<p>لدينا صف THuman و TEmp الذى يرثه ولدينا نوع خطأ EvalueError -استثناء ليشير الى قيمة خاطئة- وهو يرث الصف Exception<br />
يهمنا من جزئية TEmp جزئية تحديد المرتب </p>
<pre class="brush: delphi;">function TEmp.GetSalary: Integer;
begin
   Result:=self.fSalary;
end;

procedure TEmp.SetSalary(aSalary: Integer);
begin
   if aSalary &lt;= 0 then
      Raise EValueError.Create('You should offer more!');
   self.fSalary := aSalary;
end; </pre>
<p>لاحظ اذا كان المرتب قيمته اقل من او تساوى 0 فيتم رفع -القاء- استثناء بإستخدام Raise وتأخد كائن من الإستثناء وهنا هو EValueError ونمرر للمشيد له رسالة you should offer more<br />
عند التنفيذ نقوم بوضع الكود بين قسمى try, except </p>
<pre class="brush: delphi;">        try
            e1.Salary:= -20;
            except
              on ex:EValueError do
               begin
                writeLn('invalid salary...');
                writeLn('EMessage: ', ex.Message);

               end;
           end; </pre>
<p>فيتم محاولة تنفيذ الكود فى قسم try وعند حدوث استثناء من نوع EValueError نقوم بتعريف هذا الإستثناء بإسم ex لنستطيع الوصول الى معلومات مفيدة حوله كالرسالة اللتى يحملها ex.Message</p>
<p>نحتاج ايضا فى بعض الأحيان الى تنفيذ كود دائما كغلق اتصال مع قاعدة بيانات او غلق ملف او او -تستخدم غالبا للتخلص من ال resources المفتوحة- وهنا نأتى الى try/finally</p>
<pre class="brush: delphi;"> try
	//somecode
finally
	//executed..</pre>
<p>توفر اللغات طريقة لدمج try, except, finally سويا </p>
<pre class="brush: delphi;">try
	//somecode
except
	//somecode on error
finally
	//always executed.. </pre>
<p>ولكن فى FPC تستطيع تحقيق ذلك بإنشاء قسم فرعى ل try/except داخل try/finally كالتالى مثلا</p>
<pre class="brush: delphi;">try
        try
            e1.Salary:= -20;
            except
              on ex:EValueError do
               begin
                writeLn('invalid salary...');
                writeLn('EMessage: ', ex.Message);

               end;
           end;
     finally
            WriteLn('Always executed..'); </pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=35&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a5%d8%b3%d8%aa%d8%ab%d9%86%d8%a7%d8%a1%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>التعامل مع الملفات</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%aa%d8%b9%d8%a7%d9%85%d9%84-%d9%85%d8%b9-%d8%a7%d9%84%d9%85%d9%84%d9%81%d8%a7%d8%aa/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%aa%d8%b9%d8%a7%d9%85%d9%84-%d9%85%d8%b9-%d8%a7%d9%84%d9%85%d9%84%d9%81%d8%a7%d8%aa/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:53:16 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[file handling]]></category>
		<category><![CDATA[fpc]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=32</guid>
		<description><![CDATA[الفصل السابع اهم الطرق Reset(F) تفتح ملف فى وضع القراءة Rewrite(F) تفتح ملف فى وضع الكتابة Append(F) بتفتح ملف فى وضع الإضافة Assign(F, file_path) بتسند الملف المفتوح ل File Handler من النوع File Flush بت flush ال buffer Close(F) بتغلق الFile Handler EOLN(F) EOLN: End of Line نهاية السطر؟ EOF(F) EOF: End of File نهاية [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=32&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل السابع</strong></p>
<p>اهم الطرق</p>
<pre class="brush: delphi;"> </pre>
<p>Reset(F)<br />
تفتح ملف فى وضع القراءة</p>
<pre class="brush: delphi;">Rewrite(F) </pre>
<p>تفتح ملف فى وضع الكتابة </p>
<pre class="brush: delphi;">Append(F) </pre>
<p>بتفتح ملف فى وضع الإضافة</p>
<pre class="brush: delphi;">Assign(F, file_path) </pre>
<p>بتسند الملف المفتوح ل File Handler من النوع File<br />
Flush<br />
بت flush ال buffer </p>
<pre class="brush: delphi;">Close(F) </pre>
<p>بتغلق الFile Handler</p>
<pre class="brush: delphi;">EOLN(F) </pre>
<p>EOLN: End of Line<br />
نهاية السطر؟</p>
<pre class="brush: delphi;">EOF(F) </pre>
<p>EOF: End of File<br />
نهاية الملف؟</p>
<pre class="brush: delphi;">Erase(F) </pre>
<p>لحذف ملف ما</p>
<pre class="brush: delphi;">Rename(F, new_name)   </pre>
<p>تسمية F ل new_name</p>
<pre class="brush: delphi;">Seek(F, pos) </pre>
<p>بتنقل الموقع الحالى لpos معين فى ال File</p>
<pre class="brush: delphi;">SeekEOF(F) </pre>
<p>بتنقل ال الموقع الحالى لي نهاية الملف</p>
<pre class="brush: delphi;">SeekEOLN(F) </pre>
<p>بتنقل ال الموقع الحالى ل نهاية السطر</p>
<p>التعامل مع الملفات النصية<br />
اولا تنشئ متغير من النوع Text فى ال قسم المتغيرات</p>
<pre class="brush: delphi;">   F:Text; </pre>
<p>2- تسند ليه ملف ما</p>
<pre class="brush: delphi;"> Assign(F, 'textf.txt');</pre>
<p><strong>الكتابة</strong></p>
<p>3- للكتابة استدعى ReWrite عليه</p>
<pre class="brush: delphi;">Rewrite(F); </pre>
<p>4- اكتب فيه بإستخدام WriteLn</p>
<pre class="brush: delphi;">   For I:=0 To 10 do
       begin
            WriteLn(F,'Hello, World');
       end; </pre>
<p>طبعا عرف ال I فى قسم المتغيرات</p>
<pre class="brush: delphi;">   I: Integer; </pre>
<p>الإضافة<br />
3- استدعى ال Append عليه</p>
<pre class="brush: delphi;">Append(F); </pre>
<p>4- ضيف اى شئ انت تريدها وليكن سطر واحد مثلا كالتالى</p>
<pre class="brush: delphi;">   WriteLn(F,'a HELLO WORLD LINE!'); </pre>
<p><strong>القراءة</strong><br />
3- استدعى ال Reset عليه</p>
<pre class="brush: delphi;">   Reset(F); </pre>
<p>4- تقدر تقرا السطور بإستخدام ReadLn كالتالى مثلا</p>
<pre class="brush: delphi;">    //Loop till the EOF
   Repeat
         ReadLn(F, Line);
         WriteLn(Line);

   Until EOF(F);</pre>
<p>هنا هيتم قرائة كل سطر وطباعته (فى متغير Line:String تم تعريفة فى ال قسم المتغيرات )</p>
<p>اخيرا تقفل المقبض<br />
5-اقفل المقبض</p>
<pre class="brush: delphi;">   Close(F); </pre>
<p>بعض الدوال المساعدة</p>
<pre class="brush: delphi;">ExtractFileName(F)</pre>
<p>الحصول على اسم</p>
<pre class="brush: delphi;">ExtractFilePath(F) </pre>
<p>الحصول على المسار الموجود فيه الملف</p>
<pre class="brush: delphi;"> ExtractFileExt(F)</pre>
<p>الحصول على امتداده</p>
<pre class="brush: delphi;"> ExtractFileDir(F)</pre>
<p>الحصول على اسم المجلد الموجود فيه الملف</p>
<pre class="brush: delphi;">ExtractFileDrive(F) </pre>
<p>الحصول على اسم الدرايف</p>
<p>عرف procedure كالتالى مثلا</p>
<pre class="brush: delphi;">Procedure GetInfo(F: String);
begin
    WriteLn('F    :', F);
    WriteLn('FileName    :', ExtractFileName(F));
    WriteLn('FileDirPath    :', ExtractFilePath(F));
    WriteLn('FileExt     :', ExtractFileExt(F));
    WriteLn('FileDir     :', ExtractFileDir(F));
    WriteLn('FileDrive   :', ExtractFileDrive(F));
end;</pre>
<p>وحاول تمرر ليه شئ مثل</p>
<blockquote><p>c:lazarusbinlaz.exe</p></blockquote>
<pre class="brush: delphi;">    GetInfo('c:lazarusbinlaz.exe');</pre>
<blockquote><p>
F: &#8216;c:lazarusbinlaz.exe&#8217;<br />
FileName :laz.exe<br />
FileDirPath :c:lazarusbin<br />
FileExt :.exe<br />
FileDir :c:lazarusbin<br />
FileDrive :c: </p></blockquote>
<p>تعالى للكود</p>
<pre class="brush: delphi;"> program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils
  { you can add units after this };

Procedure GetInfo(F: String);
begin
    WriteLn('F    :', F);
    WriteLn('FileName    :', ExtractFileName(F));
    WriteLn('FileDirPath    :', ExtractFilePath(F));
    WriteLn('FileExt     :', ExtractFileExt(F));
    WriteLn('FileDir     :', ExtractFileDir(F));
    WriteLn('FileDrive   :', ExtractFileDrive(F));
end;
var
   F:Text;
   I: Integer;
   Line:String;
begin
   Assign(F, 'textf.txt');
   //Rewrite
   {
   Rewrite(F);
   For I:=0 To 10 do
       begin
            WriteLn(F,'Hello, World');
       end;
   Close(F);
    WriteLn('Written!');
   }

   //Append
   {
   Append(F);
   WriteLn(F,'a HELLO WORLD LINE!');
   Close(F);
   WriteLn('Appended!');
   }

   //Reading
    {
   Reset(F);
   //Loop till the EOF
   Repeat
         ReadLn(F, Line);
         WriteLn(Line);

   Until EOF(F);

   WriteLn('Done Reading!');
   }

   //Close(F);

   //GetInfo('c:lazarusbinlaz.exe');

   ReadLn;

end.</pre>
<p>طبعا هتحتاج تشيل ال كومينت من على كل قسم للتنفيذ</p>
<p>ناقص التعامل مع ال typed files </p>
<p>تقدر تتابع اكثر هنا </p>
<p>http://delphi.about.com/od/fileio/Fi&#8230;ith_Delphi.htm</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=32&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%aa%d8%b9%d8%a7%d9%85%d9%84-%d9%85%d8%b9-%d8%a7%d9%84%d9%85%d9%84%d9%81%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>البرمجة الكائنية</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a7%d9%84%d9%83%d8%a7%d8%a6%d9%86%d9%8a%d8%a9/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a7%d9%84%d9%83%d8%a7%d8%a6%d9%86%d9%8a%d8%a9/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:44:09 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=29</guid>
		<description><![CDATA[الفصل السادس ال Object Oriented Programming موضوع لذيذ جدا وهو مش فيه اى جديد عن حياتك.. اذا بصيت لأى شئ حواليك هتلقيه Object انسان عربية طيارة شجرة عمارة.. الخ كلهم بيشتركو فى كلمة انهم Object! ولكن لكل شئ فيهم خصائص محددة ووظائف خاصة فيه نيجى الأول نفرق ال Class عن ال Object على فرض لدينا [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=29&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل السادس</strong></p>
<p>ال Object Oriented Programming موضوع لذيذ جدا وهو مش فيه اى جديد عن حياتك.. اذا بصيت لأى شئ حواليك هتلقيه Object انسان عربية طيارة شجرة عمارة.. الخ<br />
كلهم بيشتركو فى كلمة انهم Object! ولكن لكل شئ فيهم خصائص محددة ووظائف خاصة فيه نيجى الأول نفرق ال Class عن ال Object<br />
على فرض لدينا لوحة مرسوم عليها تصميم عمارة =&gt; هى دى الصف<br />
لكن اذا تم انشاء العمارة من التصميم دا =&gt; هو دا الكائن<br />
عندك تصميم لروبوت ومتحدد عليه خصائصه ووظايفه =&gt; هو دا الصف<br />
اذا شركة اخدت التصميم دا ونفذته =&gt; هو دا الكائن</p>
<p>على فرض اننا بنعمل تصميم لإنسان (على الورق) يعنى الصف </p>
<pre class="brush: delphi;">type THuman=class(TObject)

     Constructor Create(aName: String; aSex: Char; aColor: String);
     private
            fname: String;
            fsex: Char;
            fcolor: String;

     public

            Function GetSex(): Char;
            Procedure SetSex(aSex: Char);
            Function GetColor(): String;
            Procedure SetColor(aColor: String);
            Function GetName(): String;
            Procedure SetName(aName:String);
            Procedure Eat();
            Procedure Sleep();
end; </pre>
<p>اول كلمة هتقلها ماهذا كله ؟<br />
نمشى مع الكود واحدة واحدة</p>
<pre class="brush: delphi;"> type Thuman=class(TObject)</pre>
<p>معناها أننا بنعرف Type جديد بإسم Thuman (لاحظ ان اى Type) بنبدأه ب T “مجرد عادة&#8221;<br />
الإنسان دا ليه مميزات او صفات مثل ان ليه اسم وليه لون وليه نوع ودى اسمها fields<br />
(لاحظ ان اى field بنبدأه ب f)<br />
لن نسمح لأى حد بلمسها -يعدل فيها او يتعامل معاها- غيرى انا -الصف- وبموافقتى وشروطى ودا بيتم من خلال ال Getters/Setters methods لو لاحظت ان كل Field ليه Getter/Setter<br />
fname ليها</p>
<pre class="brush: delphi;">Function GetName(): String;
            Procedure SetName(aName:String); </pre>
<p>fsex ليها</p>
<pre class="brush: delphi;">Function GetSex(): Char;
            Procedure SetSex(aSex: Char); </pre>
<p>fcolor ليها</p>
<pre class="brush: delphi;">                        Function GetColor(): String;
            Procedure SetColor(aColor: String); </pre>
<p>ال Get/Set Methods بنبدأها بشئ مناسب Get/Set <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>نيجى بعد كدا للوظائف الذى بيعملها ال Human دا وهى مثلا Eat, Sleep وwalk و Work وغيرهم دى اسمها methods </p>
<p>لاحظ اى Function/Procedure داخل صف بيسمى Method او تحديدا Instance Methods إلا فى حال اننا حددناها انها Class Method (مش تصعبها على نفسك حاليا)</p>
<p>جميل جدا كدا نحن بنخلى العالم الخارجى يتعامل مع ال Fields الخاصة بالصف عن طريق ال Getters/Setters ولكن اذا لاحظت انها غلسة شوية.. ناس كتير اشتغلت Vbاو Delphi وكان عندهم مفهوم كلمة ال Properties وهنا الموضوع بيكون الذ شوية كالتالى</p>
<pre class="brush: delphi;">type THuman=class(TObject)

 Constructor Create(aName: String; aSex: Char; aColor: String);
     private
            fname: String;
            fsex: Char;
            fcolor: String;
            Function GetSex(): Char;
            Procedure SetSex(aSex: Char);
            Function GetColor(): String;
            Procedure SetColor(aColor: String);
            Function GetName(): String;
            Procedure SetName(aName:String);
            Procedure Eat();
            Procedure Sleep();
     public

           property Name: String read GetName write SetName;
           property Sex: Char read GetSex write SetSex;
           property Color: String read GetColor write SetColor;
           Procedure InspectMe();

end; </pre>
<p>لاحظ اننا خلينا ال Getters/Setters فى ال Private Section :S<br />
طب العالم الخارجى هيتعامل ازاى مع ال Fields الخاصة بنا كدا ؟ بكل بساطة هيستخدم ال Properties مثل Name, Sex, Color</p>
<p>لعمل اى Property بتستخدم الصيغة العامة كالتالى</p>
<pre class="brush: delphi;">property property_name : Type read Getter write Setter; </pre>
<p>كالتالى مثلا</p>
<pre class="brush: delphi;">      property Name: String read GetName write SetName </pre>
<p>;<br />
هنا لدينا Property -خاصية- بإسم Name وهى من النوع String (بتتعامل بال String) سواء فى عملية ال Get او ال Set </p>
<pre class="brush: delphi;"> .Name=val //set(write), sets fname to a string
.Name //Get(read), returns fname (a string)</pre>
<p>جميل سامع واحد بيقول انت بتشتغلنا ياعم! فين الكود نفسه؟<br />
هقله اتقل شوية نحن لحد الآن فى ال Interface (مبرمجى السى/++ بيحبو يسموه ال Header) لسه هنعمل ال Implementation فى قسم لوحدها كالتالى</p>
<pre class="brush: delphi;"> Constructor THuman.Create(aName: String; aSex: Char; aColor: String);
begin
     //inherited;
     fname:=aName;
     fsex:=aSex;
     fcolor:=aColor;
end;

Function THuman.GetName(): String;
begin
     Result := Self.fname;
end;

Function THuman.GetSex(): Char;
begin
     Result := Self.fsex;
end;

Procedure THuman.SetName(aName: String);
begin
     Self.fname:=aName;
end;

Procedure THuman.SetSex(aSex: Char);
begin
     Self.fsex:=aSex;
end;

Function THuman.GetColor(): String;
begin
     Result:= Self.fcolor;
end;

Procedure THuman.SetColor(aColor: String) ;
begin
     Self.fcolor:=aColor;
end;
Procedure THuman.InspectMe() ;
begin

     WriteLn('Name: ', Self.fname);
     WriteLn('Color: ', Self.fcolor);
     WriteLn('Sex: ', Self.fsex);
end;
Procedure THuman.Eat()
begin
     //Code to eat.
end;
Procedure THuman.Sleep()
begin
     //Code to sleep.
end;</pre>
<p>اوبس فى واحد بيقولى انت نسيت تقول ال Constructor دا يعنى إيه!</p>
<p>ال Constructor بكل بساطة هو Function ولكن ليها اسم مميز Constructor .. لماذا  ؟<br />
جميل نحن قلنا ان اى كائن بيمر على مرحلتين<br />
المرحلة الأولى التصميم والتانى الإنشاء<br />
التصميم هو الذى نجهز فيه بقالنا فترة وتحديد ال Fields و ال Methods وال Properties وغيرهم لكن الإنشاء هو اننا نحول التصميم دا لكائن ودا بيتم عن طريق ال Constructor “المنشئ او المشيد&#8221; وفيه بيتجهز ال Data Members (مسمى تانى لل Fields) بالقيم الإفتراضية مثلا الString ياخد Null والInt ياخد Zero وهكذا * او * القيم الذى انت تريدها (ال Arguments الذى هتتمرر لل Constructor ) فعلا انت راجل 10/10<br />
مثل ماحصل هنا بالظبط</p>
<pre class="brush: delphi;">Constructor THuman.Create(aName: String; aSex: Char; aColor: String);
begin
     //inherited;
     fname:=aName;
     fsex:=aSex;
     fcolor:=aColor;
end; </pre>
<p>ملحوظة: مش لازم تسمى ال Constructor بإسم Create ولكنه تقليد متعارف عليه ^_^<br />
جميل جدا الصف الجميل الذى كتبناه دا مش هنسيبه متعلق فى الهوا كدا لازم نحطه فى مكان مناسب ليه </p>
<p>اعمل وحدة جديدة<br />
File -&gt; New Unit<br />
وسميها وليكن Creatures وضيف فيها الذى  كتبناه كالتالى<br />
ملحوظة: ال UNIT -الوحدة- هى ملف بنجمع فيه الأجزاء المترابطة من شغلنا مثلا لو بندرس ال OOP وبنعمل صفات للدراسة مثل Human, Robot, Bird, .. etc نخليها Creatures او مثلا Employer, Employee, Customer, .. etc تخليها Business وهكذا&#8230;</p>
<pre class="brush: delphi;">unit creatures;

{$mode objfpc}{$H+}

interface
type THuman=class(TObject)

     Constructor Create(aName: String; aSex: Char; aColor: String);
     private
            fname: String;
            fsex: Char;
            fcolor: String;
            Function GetSex(): Char;
            Procedure SetSex(aSex: Char);
            Function GetColor(): String;
            Procedure SetColor(aColor: String);
            Function GetName(): String;
            Procedure SetName(aName:String);
            Procedure Eat();
            Procedure Sleep();
     public

           property Name: String read GetName write SetName;
           property Sex: Char read GetSex write SetSex;
           property Color: String read GetColor write SetColor;
           Procedure InspectMe();

end;

implementation

Constructor THuman.Create(aName: String; aSex: Char; aColor: String);
begin
     //inherited;
     fname:=aName;
     fsex:=aSex;
     fcolor:=aColor;
end;

Function THuman.GetName(): String;
begin
     Result := Self.fname;
end;

Function THuman.GetSex(): Char;
begin
     Result := Self.fsex;
end;

Procedure THuman.SetName(aName: String);
begin
     Self.fname:=aName;
end;

Procedure THuman.SetSex(aSex: Char);
begin
     Self.fsex:=aSex;
end;

Function THuman.GetColor(): String;
begin
     Result:= Self.fcolor;
end;

Procedure THuman.SetColor(aColor: String) ;
begin
     Self.fcolor:=aColor;
end;
Procedure THuman.InspectMe() ;
begin

     WriteLn('Name: ', Self.fname);
     WriteLn('Color: ', Self.fcolor);
     WriteLn('Sex: ', Self.fsex);
end;
Procedure THuman.Eat()
begin
     //Code to eat.
end;
Procedure THuman.Sleep()
begin
     //Code to sleep.
end;

end. </pre>
<p>واعمل save ليها<br />
وتعالى نختبرها فى اى برنامج مثلا oopconcepts1<br />
كالتالى مثلا</p>
<pre class="brush: delphi;">program ooConcepts1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, creatures
  { you can add units after this };

var
   ahmed: THuman ;
begin
     ahmed:=THuman.Create('Ahmed', 'm', 'white');
     ahmed.InspectMe();

     ahmed.Name:='youssef';

     ahmed.InspectMe();

     ReadLn;
end.
 </pre>
<p><strong>الوراثة</strong></p>
<p>اعمل برنامج جديد وضيف ليه unit بإسم creatures </p>
<pre class="brush: delphi;">type

{ THuman }

THuman=class(TObject)

     Constructor Create(aName: String; aSex: Char; aColor: String);
     private
            fname: String;
            fsex: Char;
            fcolor: String;
            function GetColor: String;
            function GetName: String;
            Function GetSex(): Char;
            Procedure SetSex(aSex: Char);
            Procedure SetColor(aColor: String);
            Procedure SetName(aName:String);

     public

           class Procedure About; virtual;
           property Name: String read GetName write SetName;
           property Sex: Char read GetSex write SetSex;
           property Color: String read GetColor write SetColor;
           Procedure Eat();
           Procedure Sleep();
           Function InspectMe(): String; virtual; //Should be overriden in the child.

end; </pre>
<p>صف جديد بإسم THuman </p>
<p>فى هنا fields لل name, sex, color وفى private getters/setters<br />
وفى public functions/procedures ومجموعة من ال properties<br />
about: يعرض كلمة عن الصف دا والمفترض انه يتغير فى ال child<br />
الprototype ليه كالتالى</p>
<pre class="brush: delphi;">          class Procedure About; virtual; </pre>
<p>هنا لاحظ اننا بادئين التعريف ب class لنعبر على ان الطريقة دى خاصة بالصف يعنى تستدعيها ب<br />
Thuman.About<br />
بدون الشئ لإنشاء object من ال Thuman class<br />
فى Function بإسم InspectMe للحصول معلومات عن ال fields الموجودة بالصف ولكن المفروض نعيد تعريفها فى اى صف هيورثه</p>
<p>نيجى لل implementation الخاصة ب الصف دا</p>
<pre class="brush: delphi;">{ THuman }

constructor THuman.Create(aName: String; aSex: Char; aColor: String);
begin
     Self.fname:=aName;
     Self.fsex:=aSex;
     Self.fcolor:=aColor;

end;

function THuman.GetColor: String;
begin
     Result:=Self.fcolor;
end;

function THuman.GetName: String;
begin
    Result:=self.fname;
end;

function THuman.GetSex(): Char;
begin
   Result:=self.fsex;
end;

procedure THuman.SetSex(aSex: Char);
begin
  self.fsex:=aSex;
end;

procedure THuman.SetColor(aColor: String);
begin
     self.fcolor:=aColor;
end;

procedure THuman.SetName(aName: String);
begin
   self.fname:=aName;
end;

procedure THuman.Eat();
begin
    WriteLn('Eatin');
end;

procedure THuman.Sleep();
begin
    WriteLn('Sleepin');
end;

class procedure THuman.About;
begin
    WriteLn('Human class');
end;

function THuman.InspectMe(): String;
begin
    Result:='Name: '+self.fname + LineEnding + 'Sex: '+self.fsex + LineEnding+ 'Color: '+self.fcolor;
end; </pre>
<p>واضحة مثل المثال السابق ولكن ال Thman.InspectMe محتاجة بعض التوضيح</p>
<pre class="brush: delphi;"> function THuman.InspectMe(): String;
begin
    Result:='Name: '+self.fname + LineEnding + 'Sex: '+self.fsex + LineEnding+ 'Color: '+self.fcolor;
end;</pre>
<p>هى بتعمل دمج لمجموعة من ال strings + بتضيف LineEnding (لو متأقلم مع ال Escape Sequences فهى ال n)</p>
<p>نيجى بقة لل TEmployer هو صف بيعبر عن انسان ليه اسم ولون ونوع + (مرتب)<br />
فياإما نكتب كل الصف THuman داخل ال Temployer او نستخدم ال وراثة بإننا نورث ال Thuman لل Temployer ونضيف الجديد ليه</p>
<pre class="brush: delphi;"> type

{ TEmployer }

TEmployer=class(THuman)
      Constructor Create(aName: String; aSex: Char; aColor: String; aSalary:Integer);

      private
             fsalary:Integer;
             Function GetSalary():Integer;
             Procedure SetSalary(aSalary:Integer);

      public
            class Procedure About; override;
            Function InspectMe(): String;override;
            property Salary:Integer read GetSalary write SetSalary;

end;</pre>
<p>بمجرد انك كتبت </p>
<pre class="brush: delphi;">Temployer=class(THuman) </pre>
<p>فهنا ال Temployer هيورث كل الذى فيه ال Thuman</p>
<p>ال </p>
<pre class="brush: delphi;"> Function InspectMe(): String;override; </pre>
<p>لازم نعيد تعريفها بحيث تتوافق مع الخصائص الجديدة للصف دا مثل المرتب مثلا!<br />
لاحظ اننا سنعيد تعريف ال About, InspectMe<br />
الآن ال Implementation الخاصة به</p>
<pre class="brush: delphi;"> { TEmployer }

constructor TEmployer.Create(aName: String; aSex: Char; aColor: String;
  aSalary: Integer);
begin
     inherited Create(aName, aSex, aColor);
     self.fsalary:=aSalary;

end;</pre>
<p>اولا ال Constructor<br />
هنا الأول لازم نمرر ال قيم الخاصة بالصف الأب الذى هى ال aName, aSex, aColor للمشيد الخاص بالTHuman وال fields الجديدة نجهزها مثل ال fsalary<br />
لاحظ استخدام inherited هنا دى بتنقلك للالأب صف الخاص بال Temployer وبعدها Create “بتعبر عن ال Thuman.Create “</p>
<pre class="brush: delphi;"> function TEmployer.GetSalary(): Integer;
begin
     Result := self.fsalary;
end;

procedure TEmployer.SetSalary(aSalary: Integer);
begin
       self.fsalary:=aSalary;

end;</pre>
<pre class="brush: delphi;">class procedure TEmployer.About;
begin
  WriteLn('Employer class!');
end; </pre>
<p>هنا اعادة تعريف ل About </p>
<pre class="brush: delphi;">function TEmployer.InspectMe(): String;
begin
     Result := inherited InspectMe + LineEnding + 'Salary: '+IntToStr(self.fsalary);
end; </pre>
<p>هنا اعادة تعريف ل InspectMe بنستدعى ال InspectMe الخاصة ب الأب الذى هترجعلنا String </p>
<pre class="brush: delphi;">function THuman.InspectMe(): String;
begin
    Result:='Name: '+self.fname + LineEnding + 'Sex: '+self.fsex + LineEnding+ 'Color: '+self.fcolor;
end; </pre>
<p>وبعدها ندمج الناتج ب LineEnding و جملة </p>
<pre class="brush: delphi;">'Salary:' +IntToStr(self.fsalary) </pre>
<p>هنا بنحول قيمة ال fsalary ل string لأنها integer ومش ينفع ندمج string مع integer </p>
<p>الآن البرنامج</p>
<pre class="brush: delphi;">program ooConcepts1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  sysutils, Classes, creatures
  { you can add units after this };

var
   ahmed: TEmployer;

begin

    ahmed:=TEmployer.Create('Ahmed', 'm', 'white', 90000);
    WriteLn(ahmed.InspectMe());

    //Set name
     ahmed.Name:='youssef';
    //Set salary
    ahmed.Salary:=100000;
    WriteLn(ahmed.InspectMe());
    TEmployer.About;
    ahmed.Eat;

    ReadLn;
end. </pre>
<p>انشئ كائن من ال Temployer</p>
<pre class="brush: delphi;">    ahmed:=TEmployer.Create('Ahmed', 'm', 'white', 90000); </pre>
<p>اعرض بيناته</p>
<pre class="brush: delphi;">    WriteLn(ahmed.InspectMe()); </pre>
<p>تقدر تعدل فى ال  -خصائص- Properties براحتك<br />
اخيرا استخدام ال class method</p>
<pre class="brush: delphi;">     Temployer.About;</pre>
<p>وهى طريقة بتنتمى للصف لا الكائن</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=29&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a7%d9%84%d9%83%d8%a7%d8%a6%d9%86%d9%8a%d8%a9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>المصفوفات والسجلات</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%b5%d9%81%d9%88%d9%81%d8%a7%d8%aa-%d9%88%d8%a7%d9%84%d8%b3%d8%ac%d9%84%d8%a7%d8%aa/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%b5%d9%81%d9%88%d9%81%d8%a7%d8%aa-%d9%88%d8%a7%d9%84%d8%b3%d8%ac%d9%84%d8%a7%d8%aa/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:33:07 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[pointers]]></category>
		<category><![CDATA[records]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=25</guid>
		<description><![CDATA[الفصل الخامس المصفوفات تخيل إنك بتكتب برنامج وليكن بتتعامل فيه مع الطلاب الذى معاك فى الفصل -خارج الكلام عن قواعد البيانات- مثلا ممكن تعمل مثلا 30 متغير يعبرو عن ال 30 طالب مش كدا ؟ student1; student2; student3; student4; student5; ممممم تأكد انك لو عملت كدا والكود بتاعك اتراجع هتكون مطرود من الشغل فى تانى [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=25&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل الخامس</strong></p>
<p><strong>المصفوفات</strong></p>
<p>تخيل إنك بتكتب برنامج وليكن بتتعامل فيه مع الطلاب الذى معاك فى الفصل -خارج الكلام عن قواعد البيانات- مثلا<br />
ممكن تعمل مثلا 30 متغير يعبرو عن ال 30 طالب مش كدا ؟</p>
<pre class="brush: delphi;">student1;
  student2;
  student3;
  student4;
  student5; </pre>
<p>ممممم تأكد انك لو عملت كدا والكود بتاعك اتراجع هتكون مطرود من الشغل فى تانى دقيقة <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
الحل الطبيعى إنك تعمل Array تربط فيها بين ال 30 طالب دول</p>
<pre class="brush: delphi;">  students: array[1..4] of string;</pre>
<p>لاحظ لتقوم بتعريف اى array يلزمك<br />
1- ال Range وهنا من 1 ل 4<br />
2 نوع ال Items الذى فى ال Array وهنا String</p>
<p>ونتعامل مع ال Array الذى عرفناها كالتالى</p>
<pre class="brush: delphi;">students[1] := 'Ahmed';
     students[2] := 'Chris';
     students[3] := 'George';
     students[4] := 'Youssef'; </pre>
<p>لاحظ اننا حددنا ان اول عنصر هو 1 واخر عنصر هو 4 (من ال Range)<br />
تقدر تحصل على القيمة المخزنة فى index معين بإنك تحدد ال index فقط كالتالى مثلا<br />
WriteLn(&#8216;Students[1]: &#8216;, students[1]); //Ahmed;<br />
ملحوظة: معظم اللغات بتبدأ ال arrays فيها من ال 0 مش 1 بعكس Pascal تقدر تحدد اول قيمة تبدأ فيها براحتك.. فاانا عن نفسى مازلت بستخدم ال 0 كبداية مع Pascal زي باقى اللغات.. ولحل هذه المشكلة بنستخدم 2 Function يسهلو علينا الموضوع دا بغض النظر عن البداية والنهاية لل Array كالتالى مثلا</p>
<pre class="brush: delphi;">for index:=Low(students) to  High(students) do
         begin
              WriteLn('Student[', index, ']: ', students[index]);
         end; </pre>
<p>Low هتعيد اول Index فى ال Array<br />
High هتعيد اخر Index فى ال Array</p>
<p>احيانا قد نحتاج إلى Dynamic array بمعنى إننا نحدد عدد العناصر فى ال run-time فبكل بساطة<br />
students: array of string; // we don&#8217;t specifiy the range as it&#8217;s zero based array.<br />
لاحظ إن ال array هنا هتكون zero-indexed</p>
<p>بعد كدا نحدد ال length بإستخدام SetLength</p>
<pre class="brush: delphi;">SetLength(students, stNumber); </pre>
<p>حيث ان stNumber هو عدد ال students ..</p>
<p><strong>EnumS</strong></p>
<p>بكل بساطة هى تصميم Data Type جديد مكون من قيم محددة مثلا الفصول او ايام الإسبوع او الإتجاهات!</p>
<pre class="brush: delphi;"> Type
 TDay = (Saturday=1, Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=6, Friday=7);</pre>
<p>مثلا نهاية الإسبوع هو Friday<br />
فالأول نعلن إن نهاية الإسبوع هو من النوع Tday يعنى هياخد قيمة من الذى تم تحديدها فى Tday</p>
<pre class="brush: delphi;">var
  weekend: TDay; //friday..     </pre>
<p>نسند القيمة Friday</p>
<pre class="brush: delphi;">      weekend := Friday;</pre>
<p>بسيطة مش كدا ؟</p>
<pre class="brush: delphi;">TDays = set of TDay; </pre>
<p>لاحظ ان TDays هى عبارة عن set من ال TDay اى مجموعة هتشمل بعض العناصر الذى من النوع TDay</p>
<p>وبكدا عملنا مجموعة خاصة بال أيام .. نقدر نعمل منها متغير وليكن بإسم busyDays ونحط فيه الأيام الذى الواحد بيكون مشغول فيها !</p>
<pre class="brush: delphi;"> busyDays : Tdays;

busyDays:=[];</pre>
<pre class="brush: delphi;"> Include(set, VALUE);</pre>
<p>ونقدر نضيف فيها بإستخدام Include</p>
<pre class="brush: delphi;"> Exclude(set, VALUE);</pre>
<p>نقدر نحذف منها بإستخدام Exclude</p>
<pre class="brush: delphi;">    busyDays := busyDays + [Saturday]; {Include(set of enum, value)}
   busyDays := busyDays - [Sunday];   {Exclude(set of enum, value)}</pre>
<p>تابع المثال التالى</p>
<pre class="brush: delphi;">type
    TDay = (Saturday=1, Sunday=2, Monday=3, Tuesday=4, Wednesday=5, Thursday=6, Friday=7);
    TAlphabet= 'a'..'z';
    TDays = set of TDay;

var
  weekend: TDay; //friday..
  today: TDay;
  c: TAlphabet;
  busyDays : TDays;
begin
     weekend := Friday;
     busyDays:=[];
     Include(busyDays, Saturday);
     Include(busyDays, Sunday);
     Include(busyDays, Friday);

     //busyDays := busyDays + [Saturday]; {Include(set of enum, value)}
     //busyDays := busyDays - [Sunday];   {Exclude(set of enum, value)}

     today := Saturday;

     if today = Saturday then
        WriteLn('Happy Saturday!');

     if Sunday in busyDays then
        WriteLn('I am busy -&gt; Sunday'); </pre>
<p>لاحظ تقدر تختبر وجود value ما فى set معينة كالتالى</p>
<pre class="brush: delphi;"> if val in someSet then
  if_suite</pre>
<p><strong>السجلات</strong></p>
<p>ال Record هو Type جديد بتنشأه بيكون فيه معلومات مترابطة عن شئ معين وليكن كتاب بدل ماتقول</p>
<pre class="brush: delphi;"> name_of_book_1 := 'Introduction to Ruby';
pages_of_book_1 := 147;
author_of_book_1 := 'ahmed';
</pre>
<p>ولا</p>
<pre class="brush: delphi;">book1.Name := 'Introduction to Ruby';
book1.nOfPages := 147;
book1.author := 'ahmed' ; </pre>
<p>هل لاحظت الفرق ؟<br />
الكود اكتر وضوح ومترابط اكثر لأننا قمنا بتجميع مكونات &#8220;نوع&#8221; او سجل مكون من اكثر من متغير كل منها له قيمة !<br />
نخبر باسكال عن هذا السجل الجديد</p>
<pre class="brush: delphi;"> type
    TBook = record
          Name: String;
          Pages: Integer;
          Author: String;
    end;  </pre>
<p>لاحظ إن فى اعتقاد اننا نبدأ اى Type جديد بحرف ال T</p>
<pre class="brush: delphi;"> var
   rubyBook: TBook;
   pythonBook: TBook;
   javaBook: Tbook; </pre>
<p>هنا انشأءنا 3 متغيرات من النوع Tbook وهم rubyBook و PythonBook و javaBook<br />
نسند لهم بعض القيم</p>
<pre class="brush: delphi;">
   rubyBook.Name:='Introduction to Ruby';
   rubyBook.Pages:=147;
   rubyBook.Author:='Ahmed Youssef';

   pythonBook.Author:='Ahmed Youssef';
   pythonBook.Pages:=258;
   pythonBook.Name:='Introduction to Python';

   javaBook.Author:='Ahmed Youssef';
   javaBook.Name:='Introduction to Java';
   javaBook.Pages:=159; </pre>
<p>جميل نقدر الوقتى نعرض كل Field فيهم مثلا</p>
<pre class="brush: delphi;">WriteLn(javaBook.Author);
WriteLn(javaBook.Name);
WriteLn(javaBook.Pages); </pre>
<p>ولكن هل يعقل إننا نكتب الكلام دا 3 مرات ؟<br />
بالظبط كدا انت فهمتنى لازم نعمل Extract ل اجراء يقوم بالمهمة دى عننا كالتالى مثلا</p>
<pre class="brush: delphi;"> procedure ShowInfo(book: TBook);
begin
     WriteLn('Name: ', book.Name);
     WriteLn('Pages: ', book.Pages);
     WriteLn('Author: ', book.Author);

end;</pre>
<p>هنا ال ShowInfo Procedure هياخد book ك argument من نوع Tbook ويعرض لينا ال Fields الخاصة بيه Name, pages, Author</p>
<p>نقدر نضم Records جوا Records بالطبع تابع المثال التالى هيجاوب كل الذى فى بالك عن ال Records</p>
<pre class="brush: delphi;"> program records;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
    TBook = record
          Name: String;
          Pages: Integer;
          Author: String;
    end;
    TSex = (MALE, FEMALE);

    TPerson = record
            Name: String;
            Age : ShortInt;
            Sex : TSex;
    end;

    TApartment=record
         Owner: TPerson;
         Area: integer;
         NumberOfRooms: ShortInt;
         PopulatedWith: ShortInt;
    end;

procedure ShowInfo(book: TBook);
begin
     WriteLn('Name: ', book.Name);
     WriteLn('Pages: ', book.Pages);
     WriteLn('Author: ', book.Author);

end;
var
   MyApartment:TApartment;
   Me : TPerson;
   rubyBook: TBook;
   pythonBook: TBook;
   javaBook: TBook;

begin
   rubyBook.Name:='Introduction to Ruby';
   rubyBook.Pages:=147;
   rubyBook.Author:='Ahmed youssef';

   pythonBook.Author:='Ahmed youssef';
   pythonBook.Pages:=258;
   pythonBook.Name:='Introduction to Python';

   javaBook.Author:='Ahmed Yousef';
   javaBook.Name:='Introduction to Java';
   javaBook.Pages:=159;

   Me.Age:=19;
   Me.Name:='Ahmed';
   Me.Sex:=MALE;

   WriteLn('My Name is: ', Me.Name);
   WriteLn('My Age  is: ', Me.Age);
   if Me.Sex = Male then
      WriteLn('And MALE!')
   else
      WriteLn('And a WOMAN!');

   MyApartment.Area := 400;
   MyApartment.Owner:=Me;
   MyApartment.NumberOfRooms:=10;
   MyApartment.PopulatedWith:=4;

   WriteLn('Name of the owner -&gt; ', MyApartment.Owner.Name);
   WriteLn('Area  -&gt; ', MyApartment.Area);
   WriteLn('Number of rooms -&gt; ', MyApartment.NumberOfRooms);
   WriteLn('Populated With  -&gt; ', MyApartment.PopulatedWith);

   ReadLn;

end.
</pre>
<p>المؤشرات</p>
<p>المؤشر هو متغير بيحتوى على قيمة ولكن القيمة هى عنوان متغير تانى من نفس نوعه .. تابع المثال التالى</p>
<pre class="brush: delphi;"> num: Integer;</pre>
<p>هنا num هو متغير من نوع Integer</p>
<pre class="brush: delphi;">  p_num: Pinteger;  // Or you may use ^Integer;</pre>
<p>هنا p_num هو pointer بيشير إلى متغير من النوع Integer</p>
<pre class="brush: delphi;"> num := 5;</pre>
<p>اعطينا ل num ال value مساوية ل 5</p>
<pre class="brush: delphi;">p_num :=@num; //address of num...  </pre>
<p>اعطينا ل p_num ال value وهى مساوية لعنوان num فى الذاكرة ونقدر نحصل عليها بإستخدام ال @ قبل اسم المتغير.</p>
<pre class="brush: delphi;">     WriteLn('Address of num: ', Integer(@num));
    WriteLn('Value of num: ', num);
    WriteLn('p_num, points to the address: ', Integer(p_num));
    WriteLn('p_num^, the value contained at the address that p_num points to is: ',      Integer(p_num^));</pre>
<p>للحصول على القيمة المخزنة فى المتغير اللذي يشير ليه p_num نقدر نحصل عليها كالتالى</p>
<pre class="brush: delphi;">p_num^ </pre>
<p>بكل تأكيد تستطيع ان تستخدم pointer ل anonymouse addresses! يعنى مش شرط تعمل متغير وتجعل الpointer يشير ليه.. لأ، تقدر تحجز منطقة فى ال ميمورى وتخلى ال pointer يشير ليها بدون اهتمامك بإسم هذه المنطقة!<br />
كالتالى مثلا</p>
<pre class="brush: delphi;">var
   p: PInteger; // is a pointer to integer
begin
   //allocate memory for it
   New(p); // Simple ha ?
   WriteLn('P points to: ', Integer(p));
   //set value
   P^ := 7;
   WriteLn('p^: ', p^);

   //Free memory!
   FreeMem(p);

   ReadLn;
end. </pre>
<p>لاحظ ان Pascal حدد حجم الميمورى المطلوبة بناء على نوع p بإستخدام New(p)<br />
يوجد طرق اخرى مثل GetMem -قد نتعرض ليها لاحقا-</p>
<p>خزنا قيمة فى الذاكرة الذى p بيشير ليها وهى 7<br />
وحررنا الذاكرة التى حجزناها بإستخدام FreeMem</p>
<p>ا<em>ل Casting او التحويل القسرى هو تحويل من نوع بيانات لنوع اخر<br />
</em><br />
لاحظ فى البرنامج التالى إننا إستخدمنا P ليكون Pointer ل Integer و Char وتم ذلك بإننا عملنا Cast ليه فى الحالتين!</p>
<pre class="brush: delphi;">     program dynamicP;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
var
   dp: Pointer;
   i : Integer;
   c : Char;
begin
     i := 5;
     c := 'a';

     //let dp points to i.
     PInteger(dp) := @i;   //cast dp into PInteger type.
     WriteLn('@i : ', Integer(@i));
     WriteLn('dp: ', Integer(dp));

     WriteLn('i: ', i);
     WriteLn('dp^ :', Integer(dp^));

     //let dp points to c.

     PChar(dp) := @c;  //cast dp into PChar type.
     WriteLn('@c: ', Integer(@c));
     WriteLn('dp: ', Integer(dp));

     WriteLn('c: ', c);
     WriteLn('dp^: ', Char(dp^));

     //Wait for
     ReadLn;

end. </pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=25&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%b5%d9%81%d9%88%d9%81%d8%a7%d8%aa-%d9%88%d8%a7%d9%84%d8%b3%d8%ac%d9%84%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>الدوال والإجراءات</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%af%d9%88%d8%a7%d9%84-%d9%88%d8%a7%d9%84%d8%a5%d8%ac%d8%b1%d8%a7%d8%a1%d8%a7%d8%aa/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%af%d9%88%d8%a7%d9%84-%d9%88%d8%a7%d9%84%d8%a5%d8%ac%d8%b1%d8%a7%d8%a1%d8%a7%d8%aa/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:21:17 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[procedures]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=23</guid>
		<description><![CDATA[الفصل الرابع كثير من الناس للأسف لايعلم الفرق بين ال Function -دالة- وال Procedure -اجراء-! فى الواقع معظم اللغات حاليا لاتفرق بينهم .. يوجد من يعتبر ان ال procedure هو حالة خاصة من Function وفى بيعتقد العكس ان ال Function هى الحالة الخاصة من ال procedure وهكذا! ملحوظة لمبرمجى C/C++/C# اى Function ال return type [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=23&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل الرابع<br />
</strong></p>
<p>كثير من الناس للأسف لايعلم الفرق بين ال Function  -دالة- وال Procedure -اجراء-! فى الواقع معظم اللغات حاليا لاتفرق بينهم .. يوجد من يعتبر ان ال procedure هو حالة خاصة من Function وفى بيعتقد العكس ان ال Function هى الحالة الخاصة من ال procedure وهكذا!</p>
<p>ملحوظة لمبرمجى C/C++/C# اى Function ال return type لهاvoid هى procedure !</p>
<p>نتكلم الأول ماهى هى ال Function او ال Procedure ؟<br />
بإختصار هى كود اتكتب مرة وسيستخدم بكثرة فبدل مايكتب كل مرة .. كتبناه مرة واحدة ثم نستخدمه داخل برنامجنا.. على سبيل المثال .. اننا نريد ان نعرض رسالة معينة فى برنامجنا بصورة دورية وليكن كالتالى مثلا</p>
<pre class="brush: delphi;">WriteLn('Hi');
WriteLn('Hi');
WriteLn('Hi'); </pre>
<p>هل تعتقد إن يعقل إنك تكتب ال 4 سطور دول فى كل مرة تريد تظهر فيها الرسالة ؟ او على فرض إنك غيرت الرسالة من Hi ل Hola مثلا هل هتقعد تعدل فى كل السطور ؟<br />
رائع جدا فإحنا تريدين نكتب ال block دا مرة واحدة وننفذه كل ماحبينا بدون مانكرر نفسنا! فبكل بساطة هنكتب procedure او function تنفذلنا الذى نحن تريدينه كالتالى مثلا</p>
<pre class="brush: delphi;"> procedure SayHi3Times;
    var
       counter : Integer;
     begin
           WriteLn('Hi');
           WriteLn('Hi');
          WriteLn('Hi');
    end;</pre>
<p>الكود السابق يعمل 100% ولكن مش تصميم حلو ل procedure ليه ؟ على فرض إننا حبينا نغير ال implementation بتاعنا او تريدين نخليها 4 times او او او .. فلازم نراعى تصميم ال procedure بطريقة جيدة كالتالى مثلا</p>
<pre class="brush: delphi;">procedure SayHi3Times;
    var
       counter : Integer;
     begin
       for counter := 1 to 3 do
           begin
                WriteLn('Hi');
           end;
    end; </pre>
<p>ونستدعيه فى اى مكان فى برنامجنا كالتالى</p>
<pre class="brush: delphi;">    SayHi3Times;</pre>
<p>رائع جدا بالنسبة ل Procedure بيعرض رسالة hi ل 3 مرات! طب على فرض إنى تريد اغير ال 3 مرات دول اخليهم 4 او 5 ؟ قدامى اكتر من حل &#8230; منها إنى اعدل ال implementation نفسها واخلى ال counter يعد لحد ال 4 او ال 5 .. او إنى اخلي ال Procedure مصمم بطريقة افضل .. بحيث إنى احدد عدد مرات الرسالة بدون ماصدع نفسى <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: delphi;">procedure SayHi(NumberOfTimes: Integer);
     var
        counter: Integer;
     begin
          for counter := 1 to NumberOfTimes do
              begin
                   WriteLn('Hi!');
              end;
     end; </pre>
<p>لاحظ هنا اننا حددنا ان عدد مرات تكرار الرسالة ك Parameter وهو NumberOfTimes وحددنا ان ال Data Type بتاعه هو Integer<br />
فكدا الموضوع اصبح اسهل <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: delphi;">SayHi(5); //Say hi 5 times.
     SayHi(7); //Say hi 7 times. </pre>
<p>وكدا اصبح كل المطلوب مننا هو اننا نمرر عدد مرات التكرار ك argument لل procedure SayHi!<br />
جميل .. كدا نقدر نطلع بتعريف لل procedure .. هو code اتكتب ليتم استخدامه اكتر من مرة بدون الشئ لكتابته فى كل مرة<br />
لاحظ الفرق بين ال Parameter وال argument: هو إن ال parameter هو الذى متحدد انه هيتمرر لل Function فى التعريف بتاعها ولكن ال argument هو الذى تمرر بالفعل!</p>
<p>نيجى لل Functions<br />
على فرض إننا تريد نحسب قيمة مساحة مربع مثلا طول ضلعه 5 مثلا ولكن مش تريدين نكرر نفسنا فى كل الكود ف إننا نكتب العلاقة<br />
بالمناسبة العلاقة هى مربع طول الضلع <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<pre class="brush: delphi;"> function AreaOfSquare5: Integer;
      begin
           Result := 5*5;
      end;</pre>
<p>ونستخدمه كالتالى</p>
<pre class="brush: delphi;">WriteLn('The Area of Square (5 units length): ', AreaOfSquare5); </pre>
<p>واحد هيسأل ايه قيمة AreaOfSquare5 ؟ الذى موجودة فى WriteLn ؟<br />
الإجابة هى الشئ الوحيد الذى تقدر تخمنه <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  هى قيمة ال Result<br />
وبكل تأكيد ال Integer الذى موجودة فى السطر دا</p>
<pre class="brush: delphi;">function AreaOfSquare5: Integer; </pre>
<p>بتعبر عن ال Data Type الخاص ب Result !<br />
رائع جدا .. لاحظ إنك مش تقدر تمرر procedure لأن ال procedure مش ليها Result هو إجراء بينفذ شئ معين مش اكتر ولكن ال Function بتنفذ شئ معين + ترجع ليك النتيجة النهائية <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
ملحوظة لمعظم المبرمجين: Result هى Return<br />
ال Function الخاصة بنا شغالة مثل الفل بالنسبة ل Function تحسب مساحة مربع طول ضلعه 5مش كدا ؟ <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
ولكن كناس يهمها انها مش تكرر نفسها! لازم نعيد تصميم ال Function بحيث إنها تساعدنا مع كل الأطوال مش ال5 بس ؟<br />
اها صح .. كدا انا تأكدت إنك فهمت ال Function Parameters بنسبة 100% <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
نحدد طول الضلع ك Parameter فى ال Function ونتعامل بناء عليه <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<pre class="brush: delphi;"> function AreaOfSquare(Side: Integer): Integer;
      begin
           Result := Side*Side;
      end;</pre>
<p>ونستخدمها بالصورة دى</p>
<pre class="brush: delphi;">     WriteLn('The Area of Square (3 units length): ', AreaOfSquare(3));
     WriteLn('The Area of Square (9 units length): ', AreaOfSquare(9)); </pre>
<p>تابع ال Function التالية..</p>
<pre class="brush: delphi;"> function AreaOfRect(H: Integer; W:Integer): Integer;
      begin
           Result := H*W;
      end;</pre>
<p>المفروض إنها تحسبلنا مساحة اى مستطيل طوله H وعرضه W (وهنا مررناهم ك Parameters ) ليكون الكود بتاعنا ابسط + لعدم الشئ لكتابة 100 مليون Function بنفس الإسم لكل طول وكل عرض !<br />
والإستخدام كالتالى</p>
<pre class="brush: delphi;">WriteLn('The Area of Rect   (7H, 4W)        : ', AreaOfRect(7, 4)); </pre>
<p>بسيطة ها ؟</p>
<p>نيجى لشئ مهمة وهى ال Overloading .. مشكلة ال C انها كانت الأسامى بتخلص فيها بسرعة.. تخيل مثلا مش ينفع تكتب غير Function واحدة بإسم واحد! ؟ لكن اللغات الحديثة معظمها بيقدم ال Overloading وفيها بيكون ال Compiler/interpreter ذكى بيقدر يحدد اي Function المبرمج إستخدمها بناء على عدد ال Argument الذى هو باصاها لل Function!</p>
<p>Overloading<br />
تعالى نشوف مثال ل overloading على procedure وليكن hola</p>
<pre class="brush: delphi;">procedure hola; </pre>
<p>دا ال procedure الأساسى ولكن إكتشفنا إننا ممكن تريدين نحدد عدد المرات ك argument لل procedure !<br />
فبكل بساطة </p>
<pre class="brush: delphi;">procedure hola(Times: Integer); overload; </pre>
<p>معنى Overload اننا هنعمل implementation خاصة ل hola فى حال لو اتمرر ليه Integer والكمبيلر مشكلته هو انه يعرف اى procedure هيستدعيه!</p>
<pre class="brush: delphi;"> hola</pre>
<p>هنا الكمبيلر هيستدعى الأولى</p>
<pre class="brush: delphi;">     hola(7); </pre>
<p>وهنا هيستدعى التانية</p>
<p>مثال اخر </p>
<pre class="brush: delphi;"> function Area(Side:Integer): Integer;</pre>
<p>هنا هيتم استدعاء ال Function دى لو اتمرر ليها Argument واحدة معبرة عن ال Side لو إستخدمناها بالشكل دا</p>
<pre class="brush: delphi;"> WriteLn('The Area of Square (5 units length): ', Area(5)); </pre>
<pre class="brush: delphi;"> function Area(H: Integer; W: Integer): Integer; overload;</pre>
<p>وهنا تعريف تانى مختلف وبيتم إستدعاءه فى حال لو إتمرر 2 arguments ك H, W لمستطيل وهكذا &#8230;</p>
<p>لاحظ القابليه لوجود اكتر من صورة ل Function او Procedure او او هى ال Polymorphism وخليها فى بالك لحد مانوصل لل OOP <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>Inline</em><br />
انك تحدد ال Function على إنها inline بيعنى استخدامها ك macro لمستخدمى ال C (مع اختلاف جوهرى ان شاء الله هنتعرض ليه)<br />
بإختصار .. اذا ال Function الخاصة بك صغيرة فعرفها على انها inline لتضمن اداء افضل فى برنامجك<br />
ولكن خلى بالك ان حجم ال executable هيزيد!</p>
<p>مثلا Function للحصول على ال ABS او القيمة المطلقة لعدد</p>
<p>القيمة المطلقة: هى القيمة الموجبة للعدد او العدد بدون الإشارة السالبة إذا كانت موجودة<br />
مثلا 8 .. القيمة المطلقة ليها هى 8<br />
مثلا -8 .. القيمة المطلقة ليها هى 8 </p>
<pre class="brush: delphi;"> function ABS(Num: Integer) :Integer;
    begin
         if Num &gt; 0 then
            Result := Num
         else
            Result := -Num;
    end;</pre>
<p>ولكنك المفترض إنك تعرفها على إنها inline وت implement ال Function على إنها inline كالتالى مثلا</p>
<pre class="brush: delphi;">function ABS(Num: Integer) :Integer; inline; //Faster.
    begin
         if Num &gt; 0 then
            Result := Num
         else
            Result := -Num;
    end; </pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=23&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d8%af%d9%88%d8%a7%d9%84-%d9%88%d8%a7%d9%84%d8%a5%d8%ac%d8%b1%d8%a7%d8%a1%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>المتحكمات والتكرار</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%aa%d8%ad%d9%83%d9%85%d8%a7%d8%aa/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%aa%d8%ad%d9%83%d9%85%d8%a7%d8%aa/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:11:11 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[loop]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=17</guid>
		<description><![CDATA[الفصل الثالث Pascal بتقدملك طرق للتحكم فى برنامج وإختبارات -مثل كل اللغات- خلال البرنامج مثل if, then ,elseif, else, case, .. etc. if then if_suite تابع المثال التالى فى حال إذا كان الName الذى هيدخله المستخدم قيمته ahmed سينفذ الBlock -مجموعة الأسطر-التالية ل then وإلا لن يتم تنفيذ شئ -لأننا لم نخبر برنامجنا إن يعمل [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=17&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>الفصل الثالث</strong></p>
<p>Pascal بتقدملك طرق للتحكم فى برنامج وإختبارات -مثل كل اللغات- خلال البرنامج مثل if, then ,elseif, else, case, .. etc.</p>
<p>if  then<br />
if_suite</p>
<p>تابع المثال التالى فى حال إذا كان الName الذى هيدخله المستخدم قيمته ahmed سينفذ الBlock -مجموعة الأسطر-التالية ل then وإلا لن يتم تنفيذ شئ -لأننا لم نخبر برنامجنا إن يعمل شئ معين لو Name  قيمته ليست احمد <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: delphi;"> var
  Name: String;

begin
  Write('Enter your name: ');
  ReadLn(name);

  if name = 'ahmed' then
   WriteLn('Access Granted.');
  {else
   WriteLn('Access Denied.');
  }
  ReadLn();

end.</pre>
<p><strong>ملحوظة: </strong><br />
:= -&gt; لإسناد قيمة<br />
= -&gt; لإختبار قيمة</p>
<pre class="brush: delphi;"> X := 5;</pre>
<p>هنا اعطينا المتغير X ال 5</p>
<pre class="brush: delphi;"> x = 5;</pre>
<pre class="brush: delphi;"> x = 5 </pre>
<p>هنا بنختبر هل ال او لأ!</p>
<p>if  then<br />
<em>if_suite</em><br />
else<br />
<em>else_suite</em></p>
<pre class="brush: delphi;">var
  Name: String;

begin
  Write('Enter your name: ');
  ReadLn(name);

  if name = 'ahmed' then
   WriteLn('Access Granted.')
  else
   WriteLn('Access Denied.');

  ReadLn();

end. </pre>
<p>لاحظ دور else هنا .. إن إذا تم إدخال اى قيمة غير ahmed هيتنفذ الBlock التابع ل else وهو Access Denied!</p>
<pre class="brush: delphi;">var
  age: Integer;

begin

  WriteLn('Enter your age: ');
  ReadLn(age);

  if age &lt; 18 then
     WriteLn('Not old enough for driving test.');
  else
     WriteLn('GOOD LUCK!');
end.
 </pre>
<p>لو العمر اقل من 18 سينفذ هذا الblock</p>
<pre class="brush: delphi;">WriteLn('Not old enough for driving test.'); </pre>
<p>لو لأ سيتنفذ </p>
<pre class="brush: delphi;">WriteLn('GOOD LUCK!');
 </pre>
<p><strong>if/else if/ else</strong></p>
<p>if  then<br />
<em>if_suite</em><br />
elseif  then<br />
<em>elseif_suite</em><br />
else<br />
<em>else_suite</em></p>
<p>تابع المثال التالى</p>
<pre class="brush: delphi;"> var
  Number: Integer;

begin
     Write('Enter a number in range 1, 5: ');
     ReadLn(Number);

     if Number=1 then
        WriteLn('One!')
     else if Number=2 then
        WriteLn('Two!')
     else if Number=3 then
        WriteLn('Three!')
     else if Number=4 then
        WriteLn('Four!')
     else if Number=5 then
        WriteLn('Five!')
     else
        WriteLn('It is not in range 1 to 5');

     ReadLn();
end.</pre>
<p>لاحظ طالما نقوم بعمل Fall فالأفضل نستخدم switch statement كالتالى</p>
<pre class="brush: delphi;">var
   dayNum: Integer;

begin
     Write('Enter: ');
     ReadLn(dayNum);

     case dayNum of
          1: WriteLn('Sunday');
          2: WriteLn('Monday');
          3: WriteLn('Tuesday');
          4: WriteLn('Wednesday');
          5: WriteLn('Thursday');
          6: WriteLn('Friday');
          7: WriteLn('Saturday');
          else //default
               begin
                    WriteLn('U R on EARTH!');
               end;

     end;

     ReadLn;
end. </pre>
<p>لاحظ هنا اننا نعمل check على dayNum ونرى اى حالة ستتوافق معاه&#8230;<br />
نقدر نستخدم case مع ranges -واضح من كلامنا ان range معناها range <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
ال range هو الفترة (مثلا 1..5 هو الأرقام من 1 الى 5)</p>
<pre class="brush: delphi;">var
   Age: Integer;

begin
     Write('Age? ');
     ReadLn(Age);

     case Age of
          1..5 : WriteLn('Cute Baby!');
          6..10: WriteLn('Mean kid!');
          11..14: WriteLn('Boy!');
          15..18: WriteLn('Teen!');
          19..23: WriteLn('Adult!');
          24..40: WriteLn('Regular guy');
          41..60: WriteLn('Gettin older!');
          else
              begin
                   WriteLn('R U Human?');
              end;
     end;
</pre>
<p><strong>التكرار</strong><br />
اى Loop عبارة عن تكرار suite او مجموعة من ال statements ل<br />
1 – عدد من المرات<br />
2- حتى يتحقق شرط ما </p>
<p>طبعا كلام عجيب <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>التكرار لعدد من المرات معناه اقرب مثال .. نفذ 100 تمرين ضغط !<br />
تكرار لحد ما شرط يتحقق مثلا<br />
طالما جائع كلّ  </p>
<p>while  do<br />
<em>loop_suite</em></p>
<pre class="brush: delphi;">   while i = 0 do
           begin
                WriteLn(i);
                Dec(i); // i := i - 1;
           end; </pre>
<p>طالما i اكبر من او تساوى صفر سينفذ ال Block التالى</p>
<pre class="brush: delphi;">begin
                WriteLn(i);
                Dec(i); // i := i - 1;
           end; </pre>
<p>فى loop تانية وهى</p>
<pre class="brush: delphi;"> repeat
        loop_suite
until ;</pre>
<p>الفرق هو إن ال loop_suite بتتنفذ قبل مايتم إختبارها.. فعشان كدا ال loop_suite لازم تتنفذ ولو مرة واحدة على الأقل!</p>
<p>فى loop هنشوفها كتير وهى ال for loop وهى كالتالى<br />
تصاعدية</p>
<pre class="brush: delphi;">for  to  do
for_suite </pre>
<p>تنازلية</p>
<pre class="brush: delphi;">for  downto  do
for_suite </pre>
<pre class="brush: delphi;"> var
   counter: Integer;

begin
     for counter := 0 to 10 do
         begin
              WriteLn('Counter: #', counter);
         end;

         ReadLn;
end.</pre>
<p><strong>تنبيه:</strong> إذا معتاد على  </p>
<pre class="brush: delphi;">for(start; cond; inc){
        for_suite
} </pre>
<p>فالأفضل هنا إنك تستخدم ال while loop لتكون اسهل فى التحكم فى مقدار ال step -الخطوة- </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=17&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d8%a7%d9%84%d9%85%d8%aa%d8%ad%d9%83%d9%85%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>مرحبا ايها العالم!</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d8%b1%d8%ad%d8%a8%d8%a7-%d8%a7%d9%8a%d9%87%d8%a7-%d8%a7%d9%84%d8%b9%d8%a7%d9%84%d9%85/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d8%b1%d8%ad%d8%a8%d8%a7-%d8%a7%d9%8a%d9%87%d8%a7-%d8%a7%d9%84%d8%b9%d8%a7%d9%84%d9%85/#comments</comments>
		<pubDate>Thu, 07 May 2009 01:55:25 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[first programs]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[hello world]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=9</guid>
		<description><![CDATA[بعد تحميل Lazarus وتنصيبه File -&#62; New -&#62; Program احفظ المشروع بإسم ستجد ال code التالى بال Editor كود: program hello; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; begin end. هذه هو هيكل التطبيق Run -&#62; Build or (Ctrl + F9) Run or ( F9 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=9&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>بعد تحميل Lazarus وتنصيبه</p>
<p>File -&gt; New -&gt; Program</p>
<p>احفظ المشروع بإسم</p>
<p>ستجد ال code التالى بال Editor</p>
<p>كود:</p>
<pre class="brush: delphi;">
program hello;

{$mode objfpc}{$H+}

uses

  {$IFDEF UNIX}{$IFDEF UseCThreads}

  cthreads,

  {$ENDIF}{$ENDIF}

  Classes

  { you can add units after this };

begin

end.
</pre>
<p>هذه هو هيكل التطبيق</p>
<p>Run -&gt; Build or (Ctrl + F9)</p>
<p>Run or ( F9 )</p>
<p>ستظهر شاشة سوداء وتغلق بسرعة (بسبب انهاء عملية تنفيذ البرنامج) ..مبروك اول برنامج ليك فى Pascal!</p>
<p>لاحظ فى معظم الأحيان برنامجنا سيكون بين .begin, end </p>
<p>ماهى begin, end. ؟ </p>
<p>begin هى نقطة البداية لبرنامجك</p>
<p>end. هى نقطة النهاية لبرنامجك</p>
<p>Hello world</p>
<p><em>WriteLn</em></p>
<p>هى الFunction الشهيرة للإخراج <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>بنستخدم WriteLn عندما نريد ان نطبع شئ للمستخدم كالتالى مثلا</p>
<p>كود:</p>
<pre class="brush: delphi;">
program hello;

{$mode objfpc}{$H+}

uses

  {$IFDEF UNIX}{$IFDEF UseCThreads}

  cthreads,

  {$ENDIF}{$ENDIF}

  Classes

  { you can add units after this };

begin

     WriteLn('Hello, World!');

end.
</pre>
<p>لاحظ الكود المولد يبدأ ب program hello وهنا إن اسم البرنامج hello و uses هى section قسم  يشمل ال units -الوحدات-الذى سنستخدمها</p>
<p>اعمل Run للبرنامج ستجد كلمة Hello, World ظهرت واختفت الشاشة بسرعة !؟</p>
<p>فكل الذى علينا إننا نخلي البرنامج ينتظر لمدة معينة مثلا حتى المستخدم يضغط Enter </p>
<p>فبكل بساطة سنضيف ReadLn وهى ستساعدنا فى ان البرنامج ينتظر اى محاولة إدخال من المستخدم فيفضل البرنامج شغال <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: delphi;"> begin

     WriteLn('Hello, World!'); 

     ReadLn();

end.</pre>
<p>رائع جدا كدا ال Screen بتنتظر حتى يضغط على Enter</p>
<p><strong>ماذا فعلنا للآن ؟</strong></p>
<p>begin هى البداية</p>
<pre class="brush: delphi;">WriteLn('Hello, World!');
 </pre>
<p>بتطبع كلمة Hello, World</p>
<pre class="brush: delphi;"> ReadLn();</pre>
<p>بتجعل البرنامج فى حالة انتظار المستخدم ليدوس Enter</p>
<p>end. هى نهاية البرنامج</p>
<p>ياريت نقدر نكتب الشرح السابق فى برنامجنا لتوضيحه لينا وللقارئ ؟ </p>
<p> كدا اديك عرفت مفهوم جديد وهو ال Commenting او التعليق</p>
<pre class="brush: delphi;"> begin   {The Start}

     WriteLn('Hello, World!'); {Writes Hello, World to the output}

     ReadLn(); {Waites for }

end.    {The End}</pre>
<p>تقدر تستخدم // بدل من ال { } كالتالى مثلا</p>
<pre class="brush: delphi;">//Writes Hello, World to the output </pre>
<p>نكتب برنامج بسيط عددين هنشتغل فيه كالتالى</p>
<p>1- هنعرض رسالة للمستخدم نطلب منه إنه يدخل الرقم الأول</p>
<p>2- نقرا الرقم الأول</p>
<p>3- نعرض رسالة نطلب فيها الرقم التانى</p>
<p>4- نقرا الرقم التانى</p>
<p>5- نجمع الرقمين </p>
<p>6- نعرض حاصل جمع الرقمين للمستخدم</p>
<p>تحليلنا للبرنامج على خطوات محددة هو ال Algorithm التى سنعمل بيها لحل المشكلة -البرنامج-</p>
<pre class="brush: delphi;">var

   First: Integer;

   Second: Integer;

   Result: Real;

begin

     Write('Enter the first: ');  // ask for a number

     ReadLn(First);               // Read it.

     Write('Enter the second: ');  // ask for a number

     ReadLn(Second);               // Read it.

     Result := First + Second;     // Summing.

     WriteLn('Result: ', Result) ; // Write out the Result.

     ReadLn();                     // Wait for 

end. </pre>
<p>ماهى المتغيرات ؟ هى عبارة عن alias -تسميه- ل data معينة -قابلة للتغيير- نستخدمها داخل برنامجنا ف First هنا بتمثل الرقم اللذى سيدخله ال user وsecond كذلك و Result تمثل حاصل الجمع </p>
<p>بنقوم بتحديد كل المتغيرات فى قسم مخصوص بإسم var بنحدد فيه نوع ال Variable </p>
<p>لإعطاء قيمة لمتغير بنستخدم := Operator </p>
<pre class="brush: delphi;">
Result := First+Second;
 </pre>
<p>لنعطى قيمة لمتغير سنستخدم ReadLn وهى ستاخد ال Input -المدخلات- من المستخدم وتعمل implicit cast -تحويل قسرى- لل data type وهنا تم التحويل من المدخلات من مجموعة حروف &#8220;نص&#8221; الى  إلى عدد صحيح</p>
<p>كلمة بخصوص ال Data Types</p>
<p>Char-&gt; لتمثيل الحروف</p>
<p>Integer -&gt; لتمثيل الأعداد الصحيحة </p>
<p>Real -&gt; للأعداد الحقيقية</p>
<p>String -&gt; للسلاسل النصية</p>
<p>Boolean -&gt; True, False</p>
<p>تابع هنا</p>
<p>http://wiki.freepascal.org/Data_type</p>
<p>تابع هذا المثال عن ال Data Types</p>
<pre class="brush: delphi;">var

  name: String[10];

  age : Integer;

  sex : Char;

  married: Boolean;

begin

  name := 'Ahmed';

  age  := 19;

  sex  := 'm';

  married := False;

  WriteLn('Name: ',name);

  WriteLn('Age : ',age);

  WriteLn('Sex : ',sex);

  WriteLn('Married? ',married);

  ReadLn();

end.
 </pre>
<p>نجعله تفاعلى اكثر</p>
<pre class="brush: delphi;">
var

  name: String ;

  age : Integer;

  sex : Char;

begin

  WriteLn('Gathering data...');

  Write('Name: ');

  ReadLn(name);

  Write('Age: ');

  ReadLn(age);

  Write('Sex: ');

  ReadLn(sex);

  WriteLn('Data Entered Successfully');

  WriteLn('Your Profile');

  WriteLn(' name: ', name);

  WriteLn(' age : ', age);

  WriteLn(' sex : ', sex);

  ReadLn(); //Wait for 

end. </pre>
<p><strong>الثوابت Constants </strong></p>
<p>هى عبارة عن aliases -تسميات مستعارة- لdata -بيانات- لن تتغير خلال برنامجك لأى سبب.. على سبيل المثال يوجد Constant شهير وهو PI وقيمته 3.14 </p>
<pre class="brush: delphi;"> program constants1;

const

  PI: Real = 3.14;

var

  radius: Real;

  area: Real;

begin

  Write('Enter the radius: ');

  ReadLn(radius);

  area := PI*(radius*radius);

  WriteLn('Area: ', area);

  ReadLn();

end.</pre>
<p>ال Operators </p>
<p>+ للجمع</p>
<p>- للطرح</p>
<p>* للضرب</p>
<p>/ للقسمة Real </p>
<p>div للقسمة Integer</p>
<p>mod لباقى القسمة</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=9&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d8%b1%d8%ad%d8%a8%d8%a7-%d8%a7%d9%8a%d9%87%d8%a7-%d8%a7%d9%84%d8%b9%d8%a7%d9%84%d9%85/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
		<item>
		<title>مفاهيم اساسية</title>
		<link>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d9%81%d8%a7%d9%87%d9%8a%d9%85-%d8%a7%d8%b3%d8%a7%d8%b3%d9%8a%d8%a9/</link>
		<comments>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d9%81%d8%a7%d9%87%d9%8a%d9%85-%d8%a7%d8%b3%d8%a7%d8%b3%d9%8a%d8%a9/#comments</comments>
		<pubDate>Thu, 07 May 2009 01:50:47 +0000</pubDate>
		<dc:creator>Ahmed Youssef</dc:creator>
				<category><![CDATA[Lazarus]]></category>
		<category><![CDATA[fpc]]></category>
		<category><![CDATA[introduction]]></category>

		<guid isPermaLink="false">http://lazarustutorial.wordpress.com/?p=6</guid>
		<description><![CDATA[الفصل الأول مامعنى كلمة Programming ؟ هى بتعنى القدرة على التخاطب مع الكمبيوتر وتنفيذ افكارك على ارض الواقع .. الكمبيوتر لايفهم اى شئ سوا 0 و 1 وصعب على البشر تعلمها إن لم يكن مستحيلا فنلجأ لخيارات بديلة وهى إستخدام لغات البرمجة مامعنى Programming Language ؟ بكل بساطة هى وسيلة للتخاطب مع الكمبيوتر .. ولكننا [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=6&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { so-language: zxx } --></p>
<p style="margin-bottom:0;text-align:center;" dir="rtl"><strong>الفصل الأول </strong></p>
<p style="margin-bottom:0;text-align:right;" dir="rtl">
<p style="margin-bottom:0;text-align:right;" dir="rtl"><span style="font-family:DejaVu Sans;">مامعنى كلمة </span>Programming <span style="font-family:DejaVu Sans;">؟</span></p>
<p><span style="font-family:DejaVu Sans;">هى بتعنى القدرة على التخاطب مع الكمبيوتر وتنفيذ افكارك على ارض الواقع </span>.. <span style="font-family:DejaVu Sans;">الكمبيوتر لايفهم اى شئ سوا </span>0 <span style="font-family:DejaVu Sans;">و </span>1 <span style="font-family:DejaVu Sans;">وصعب على البشر تعلمها إن لم يكن مستحيلا فنلجأ لخيارات بديلة وهى إستخدام لغات البرمجة </span></p>
<p><span style="font-family:DejaVu Sans;">مامعنى </span>Programming Language <span style="font-family:DejaVu Sans;">؟</span></p>
<p><span style="font-family:DejaVu Sans;">بكل بساطة هى وسيلة للتخاطب مع الكمبيوتر </span>.. <span style="font-family:DejaVu Sans;">ولكننا قلنا إن الكمبيوتر لايفهم اى شئ سوا ال</span>0 <span style="font-family:DejaVu Sans;">وال </span>1 <span style="font-family:DejaVu Sans;">ومستحيل على الإنسان تعلمها</span>! .. <span style="font-family:DejaVu Sans;">إذا الحل هو إستخدام لغات وسيطة </span>.. <span style="font-family:DejaVu Sans;">على سبيل المثال واحد عربى وواحد فرنسى والعربى مش بيفهم فرنسى ولا الفرنسى بيفهم عربى </span>.. <span style="font-family:DejaVu Sans;">فالحل هو إنهم يتكلمو إنجليمثل مثلا</span>&#8230; <span style="font-family:DejaVu Sans;">او يجيبو مترجم بين الإتنين مش كدا ؟</span><br />
<span style="font-family:DejaVu Sans;">فهنا الحل إننا هنجيب مترجم يترجم افكارنا للغة الكمبيوتر </span>0 <span style="font-family:DejaVu Sans;">و </span>1 <span style="font-family:DejaVu Sans;">ويقوم المترجم بنفس الدور بتحويل رد فعل الكمبيوتر الى لغتنا المفهومة </span> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span style="font-family:DejaVu Sans;">وهنا دور ال </span>Programming Language <span style="font-family:DejaVu Sans;">انت هتتعلم اللغة وكيفية التعامل معاها عشان تقدر تفهم المترجم </span>&#8220;<span style="font-family:DejaVu Sans;">المقدم من اللغة</span>&#8221; <span style="font-family:DejaVu Sans;">الذى إنت تريده وهو يفهمه للكمبيوتر بدوره </span></p>
<p><span style="font-family:DejaVu Sans;">ماهو ال </span>Source Code <span style="font-family:DejaVu Sans;">؟</span></p>
<p><span style="font-family:DejaVu Sans;">بكل اختصار هو حلك لمسألة رياضيات وتفكيرك وإستنتاجاتك عند كتابتها على ولكن هنا هو حلك لبرنامج مطلوب منك على ملف </span>Text</p>
<p>Compiled vs Interpreted<br />
<span style="font-family:DejaVu Sans;">كتير منا إشتغلو على نظم </span>Windows <span style="font-family:DejaVu Sans;">وكان دائما يرى ملفات إمتدادها </span>.exe <span style="font-family:DejaVu Sans;">فمامعنى ال </span>exe <span style="font-family:DejaVu Sans;">؟ معناها </span>Executable <span style="font-family:DejaVu Sans;">او قابل للتنفيذ </span>..<br />
<span style="font-family:DejaVu Sans;">فى لغات برمجة مثل ال </span>C <span style="font-family:DejaVu Sans;">و </span>Pascal <span style="font-family:DejaVu Sans;">بيتوافر الناتج النهائى بتاع برنامجك على صورة ملف </span>exe <span style="font-family:DejaVu Sans;">وهو عبارة عن تعليماتك اللتى مررتها للمترجم ليحولها للغة يفهمها للكمبيوتر ولكن فى صورتها النهائية </span>(<span style="font-family:DejaVu Sans;">الكلام الذى اخبره المترجم لل كمبيوتر</span>) <span style="font-family:DejaVu Sans;">فمستحيل على الإنسان إنه يقرا ذلك الملف وهنا معنى ال</span>compiled <span style="font-family:DejaVu Sans;">فهى ملف ال </span>exe <span style="font-family:DejaVu Sans;">يشمل التعليمات التى كتبتها ولكن بلغة الكمبيوتر وهو وحده القادر على فهمها</span></p>
<p><span style="font-family:DejaVu Sans;">من مميزات ال </span>Compiled Languages <span style="font-family:DejaVu Sans;">مثل ال </span>C <span style="font-family:DejaVu Sans;">هى السرعة</span><br />
<span style="font-family:DejaVu Sans;">ومن القصور هو وجوب عمل </span>Compile <span style="font-family:DejaVu Sans;">لل </span>Source Code <span style="font-family:DejaVu Sans;">على النظام الموجه له البرنامج</span>.. <span style="font-family:DejaVu Sans;">فبرنامج مكتوب على </span>Windows <span style="font-family:DejaVu Sans;">محتاج يتعمله </span>recompile <span style="font-family:DejaVu Sans;">على ال </span>Linux <span style="font-family:DejaVu Sans;">وهكذا </span>..</p>
<p><span style="font-family:DejaVu Sans;">من مميزات ال </span>Interpreted Languages <span style="font-family:DejaVu Sans;">هى ان ال </span>Source Code <span style="font-family:DejaVu Sans;">لبرامجها قياسى لايحتاج لعمل </span>Recompile <span style="font-family:DejaVu Sans;">على مختلف النظم</span></p>
<p style="margin-bottom:0;" dir="rtl" align="right"><span style="font-family:DejaVu Sans;">ومن القصور البطء </span></p>
<p><span style="font-family:DejaVu Sans;">ملحوظة</span>:<br />
<span style="font-family:DejaVu Sans;">البطء فى ال</span>Interpreted Languages <span style="font-family:DejaVu Sans;">بيكون المقصود البطء بالنسبة لل </span>Compiled Language <span style="font-family:DejaVu Sans;">وليس البطء للمستخدم لأنك لن تلاحظ الفرق لأن البطء فى شئ لايكاد يذكر</span></p>
<p><span style="font-family:DejaVu Sans;">تاريخ</span></p>
<p style="margin-bottom:0;" dir="rtl" align="right">
<span style="font-family:DejaVu Sans;">لغة </span>Pascal <span style="font-family:DejaVu Sans;">ظهرت عام </span>1970 <span style="font-family:DejaVu Sans;">على يد العالم </span>Niklaus Wirth <span style="font-family:DejaVu Sans;">وكان هدفها </span><br />
1- <span style="font-family:DejaVu Sans;">صغر الحجم </span><br />
2- <span style="font-family:DejaVu Sans;">وضوح كامل</span><br />
3- <span style="font-family:DejaVu Sans;">تعليم المبرمجين ال </span>Structured Programming <span style="font-family:DejaVu Sans;">بصورة جيدة ومنظمة </span><br />
<span style="font-family:DejaVu Sans;">بعد دخول مفهوم ال </span>OOP <span style="font-family:DejaVu Sans;">تم تطوير </span>Object Pascal <span style="font-family:DejaVu Sans;">لدعم ال</span>OOP <span style="font-family:DejaVu Sans;">بصورة متكاملة </span></p>
<p style="margin-bottom:0;" dir="rtl" align="right">
<p style="margin-bottom:0;" dir="rtl" align="right">
<p style="margin-bottom:0;" dir="rtl" align="right">
Borland <span style="font-family:DejaVu Sans;">تعتبر اكبر داعم ل </span>Pascal <span style="font-family:DejaVu Sans;">منذ ايام </span>Turbo Pascal <span style="font-family:DejaVu Sans;">وقامت بتحسينها وتطويرها إلى الصورة الحالية </span></p>
<p>Delphi: <span style="font-family:DejaVu Sans;">هى </span>IDE <span style="font-family:DejaVu Sans;">متكاملة لل </span>RAD -<span style="font-family:DejaVu Sans;">التطوير السريع للتطبيقات</span>- <span style="font-family:DejaVu Sans;">على </span>Windows<br />
Kylix: <span style="font-family:DejaVu Sans;">هى </span>IDE <span style="font-family:DejaVu Sans;">متكاملة لل </span>RAD <span style="font-family:DejaVu Sans;">على </span>*NIX</p>
<p><span style="font-family:DejaVu Sans;">حاليا تم إلغاء مشروع </span>Kylix -<span style="font-family:DejaVu Sans;">ليست لديهم نية استمرار الدعم</span>-</p>
<p><span style="font-family:DejaVu Sans;">لجذب المبرمجين لمنتجات </span>Borland <span style="font-family:DejaVu Sans;">قامو بتطوير </span>Turbo Explorer <span style="font-family:DejaVu Sans;">لتطوير </span>C++, C#, Delphi for win32 and Delphi.net</p>
<p><span style="font-family:DejaVu Sans;">على كل حال فلسفة ال</span>Open Source <span style="font-family:DejaVu Sans;">لازم تلعب دورها كالعادة فأخرجت لينا </span><br />
Free Pascal Compiler <span style="font-family:DejaVu Sans;">او </span>FPC <span style="font-family:DejaVu Sans;">للإختصار وهو </span>Multi-Platform Compiler -<span style="font-family:DejaVu Sans;">وهو الذى سنستخدمه</span>- <span style="font-family:DejaVu Sans;">يخضع ل </span>GPL</p>
<p>GNU Pascal Compiler <span style="font-family:DejaVu Sans;">او </span>GPC <span style="font-family:DejaVu Sans;">وهو </span>Compiler <span style="font-family:DejaVu Sans;">من </span>GNU <span style="font-family:DejaVu Sans;">ويعمل على معظم النظم ايضا</span></p>
<p>Lazarus: <span style="font-family:DejaVu Sans;">هو </span>Class Libraries <span style="font-family:DejaVu Sans;">محاكية ل </span>Delphi <span style="font-family:DejaVu Sans;">و</span>IDE <span style="font-family:DejaVu Sans;">متكاملة تساعدك على ال </span>RAD <span style="font-family:DejaVu Sans;">بكل بساطة فبكل إختصار </span>Lazarus <span style="font-family:DejaVu Sans;">هو البديل الأقوى ل </span>Delphi</p>
<p style="margin-bottom:0;" dir="rtl" align="right"><span style="font-family:DejaVu Sans;">سبب التسمية</span>: <span style="font-family:DejaVu Sans;">على إسم </span>Lazarus -<span style="font-family:DejaVu Sans;">بالكتاب المقدس</span>- <span style="font-family:DejaVu Sans;">اللذى احياه المسيح من الموت</span>. <span style="font-family:DejaVu Sans;">وهو ماينطبق على </span>Lazarus <span style="font-family:DejaVu Sans;">حيث تم إحيائه من </span>Megido</p>
<p style="margin-bottom:0;" dir="rtl" align="right">
<span style="font-family:DejaVu Sans;">المقدمة من ويكيبديا و الويكى الخاص ب </span>FPC, Lazarus</p>
<p style="margin-bottom:0;" dir="rtl" align="right">
<p style="margin-bottom:0;" dir="rtl" align="right">
<span style="font-family:DejaVu Sans;"><strong>التحميل والتنصيب</strong></span><strong>:</strong><br />
<span style="font-family:DejaVu Sans;">قم بإختيار مايناسبك من هنا </span><a href="http://sourceforge.net/project/showfiles.php?group_id=89339" target="_blank">http://sourceforge.net/project/showf&#8230;group_id=89339</a><br />
<span style="font-family:DejaVu Sans;">اذا لم يكن لديك </span>FPC <span style="font-family:DejaVu Sans;">فإختار </span>Package -<span style="font-family:DejaVu Sans;">حزمة</span>- <span style="font-family:DejaVu Sans;">تشملا ال </span>FPC</p>
<p style="margin-bottom:0;text-align:left;" dir="rtl">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lazarustutorial.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lazarustutorial.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lazarustutorial.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lazarustutorial.wordpress.com&amp;blog=7651354&amp;post=6&amp;subd=lazarustutorial&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lazarustutorial.wordpress.com/2009/05/07/%d9%85%d9%81%d8%a7%d9%87%d9%8a%d9%85-%d8%a7%d8%b3%d8%a7%d8%b3%d9%8a%d8%a9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/997a954b83a2fb2d34ecaae03111c10e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Striky</media:title>
		</media:content>
	</item>
	</channel>
</rss>
