Professional Documents
Culture Documents
JAVASCRIPT LERNNING
إﻋﺪاد :
م .ﺳﺎﻣـــﻲ اﻟﺮﺑﺎﯾﻌـــﺔ
By :
Eng . SAMI AL-RABA’AH
Email :
e_book@myway.com
١ ﻃﺮق ﻛﺘﺎﺑﺔ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ وﺑﻌﺾ أواﻣﺮﻫﺎ اﻟﺠﺰء اﻷول
١٧ ﺣﻠﻘﺎت اﻟﺘﻜﺮار ) ( for & While & Do while اﻟﺠﺰء اﻟﺜﺎﻟﺚ
٤٥ اﻟﻜﺎﺋﻨﺎت ) ) ( Object (Math & Date & String اﻟﺠﺰء اﻟﺴﺎدس
٥٨ ﻣﻌﻠﻮﻣﺎت ﺗﻄﺒﯿﻘﯿﺔ ) ﺟﺰء ﻋﻤﻠﻲ ﻣﻬﻢ ﺟﺪا و ﯾﺸﻤﻞ ﻋﻠﻰ أﻣﻮر ﻣﺘﻨﻮﻋﺔ ( اﻟﺠﺰء اﻟﺴﺎﺑﻊ
-ﻣﻘﺪﻣﺔ ﻋﺎﻣﻪ ﻋﻦ ﻟﻐﺔ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ :
§ : JAVASCRIPT
اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﻪ اذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ ﺗﻠﻌﺐ دور ﺣﯿﻮي وﻓﻌﺎل ﻓﻲ ﺻﻔﺤﺎت اﻟﻮﯾﺐ ﻣﻦ ﺧﻼل اﻟﻘﯿﺎم
ﺑﻮﻇﺎﺋﻒ ﻗﺪ ﺗﻜﻮن ﺧﺎرﺟﯿﺔ او داﺧﻠﯿﺔ ﺑﻞ ﻟﻨﻜﻦ اﻛﺜﺮ دﻗﺔ ﻫﻲ ﻣﺮﻧﻪ اﻟﻰ درﺟﻪ ﺗﺠﻌﻠﻚ ﺗﺘﺤﻜﻢ ﺑﻜﻞ ﺟﺰء ﻣﻦ اﺟﺰاء
ﺻﻔﺤﺔ اﻟﻮﯾﺐ ﻛﺄن ﺗﺴﺘﺨﺪﻣﻬﺎ ﻓﻲ ال formsاي اﻟﻨﻤﺎذج او ﻛﻨﻮاﻓﺬ ﺗﺨﺮج ﻟﻠﻤﺴﺘﺨﺪم ﻟﺘﺨﺒﺮه ﺑﺎﻣﺮ ﻣﻌﯿﻦ او ﺗﻨﺒﻪ
وﻏﯿﺮﻫﺎ ﻣﻦ اﻻﺳﺘﺨﺪاﻣﺎت اﻟﺘﻲ اراﻫﺎ ﻣﻦ وﺟﻬﺔ ﻧﻈﺮي ﻫﻲ اﻟﺮوح اﻟﺘﻲ ﯾﺒﺜﻬﺎ ﻣﻄﻮر اﻟﻮﯾﺐ ﻓﻲ ﺻﻔﺤﺎﺗﻪ اﺛﻨﺎء
ﺑﺮﻣﺠﺘﻪ .
اﻣﺎ ﻣﻦ اﯾﻦ ﺟﺎءت ﻟﻐﺔ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻬﻲ ﺟﺎءت ﻣﻦ ﺧﻼل اﻫﺘﻤﺎم ﺷﺮﻛﺔ Netscapeﻟﺘﻀﻔﻲ اﻟﺤﯿﻮﻳﺔ اﻟﻰ
ﺻﻔﺤﺎت اﻟﻮﻳﺐ وﻻ ﻳﻔﻮت ﻋﻠﻰ ﺑﺎل اﺣﺪ ان ﺷﺮﻛﺔ Sunھﻲ اﻻﺳﺎس واﻻم ﻓﻲ ﻟﻐﺔ اﻟﺠﺎﻓﺎ ﺑﺸﻜﻞ ﻋﺎم ﻓﻤﺎ
ﺑﺎﻟﻚ ﺑﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻠﻐﺔ ﺟﺎﻓﺎ ﺳﻜﺮﺑﺖ ھﻲ ﻟﻐﺔ ﺑﺴﯿﻄﻪ ﻧﻮﻋﺎ ﻣﺎ وﺳﮫﻠﻪ اﻟﺘﺒﻮﻳﺐ واﻟﺘﺤﻜﻢ ﺑﻞ ﻳﺴﺘﻄﯿﻊ
اﻟﺒﺮﻣﺠﻪ ﺑﮫﺎ ﻣﻦ ﻟﻢ ﻳﺘﻌﻠﻢ اي ﻟﻐﺔ ﻓﻲ ﺣﯿﺎﺗﻪ وھﺬا ﻣﺎ رﻛﺰت ﺑﻪ ﻓﻲ ﻛﺘﺎﺑﻲ ھﺬا ﺑﺎن اﺟﻌﻞ اﻟﻤﺘﺪرب ﻳﺒﺪأ ﻣﻦ
اﻟﺼﻔﺮ ﻓﻠﯿﺲ ھﺪﻓﻲ ﻓﮫﻢ ﻟﻐﺔ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻘﻂ ﻓﺤﺴﺐ ﺑﻞ اﻟﺘﻜﻨﯿﻚ اﻟﺒﺮﻣﺠﻲ ﺑﺈﺧﺘﻼﻓﺎﺗﻪ ﻓﺎﻟﻤﺒﺪأ واﺣﺪ
ﻋﻠﻰ اﺧﺘﻼف ﺷﯿﻔﺮة اﻟﻜﻮد ﻓﺎل for loopﻣﺜﻼ او ال if conditionاو ﻏﯿﺮھﺎ ﻣﻮﺟﻮده ﻓﻲ ﺟﻤﯿﻊ ﻟﻐﺎت
اﻟﺒﺮﻣﺠﻪ وﻟﮫﺬا اﻋﺘﺒﺮ ﻛﺘﺎﺑﻲ ھﺬا ﺑﺎب ﻟﺪﺧﻮل ﻣﻨﻪ اﻟﻰ ﻓﮫﻢ اﻟﻠﻐﺎت اﻟﻘﺎدﻣﻪ اﻟﺘﻲ ﺳﻮف اﻃﺮح ﺑﮫﺎ ﻛﺘﺐ ﺑﺈذن
اﷲ وﻛﺬﻟﻚ اﻟﻰ ﻟﻐﺎت اﻟﺒﺮﻣﺠﻪ اﻟﻤﻮﺟﻮد ﻛﺘﺒﺎ ﻋﻨﮫﺎ ﻓﻲ اﻻﺳﻮاق او اﻟﻨﺖ ﻓﮫﺬا اﻟﻜﺘﺎب ﺑﺪاﻳﺘﻚ ﻟﻔﮫﻢ ﺑﻘﯿﺔ
اﻟﻠﻐﺎت ﺑﻜﻞ ﺳﮫﻮﻟﻪ او ﻋﻠﻰ اﻻﻗﻞ ﺑﯿﺴﺮ ودون ﻋﻨﺎء اذا ﻟﯿﺲ ﻛﻞ اﻟﻠﻐﺎت ﻟﯿﻜﻦ ﺑﻌﻀﮫﺎ واذا ﻟﯿﺲ ﺑﻌﻀﮫﺎ اذا
ﻋﻠﻰ اﻻﻗﻞ ﺟﺰء ﻣﻦ ﻛﻞ ﻟﻐﺔ ...
ﻋﺰﻳﺰي اﻟﻤﺘﺪرب ﻟﻐﺔ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﺑﺈﻋﺘﻘﺎدي اﻟﺨﺎص ﻛﻤﻄﻮر وﻳﺐ ﻣﮫﻤﺔ ﻧﻮﻋﺎ ﻣﺎ ﻓﺎﻧﺖ ﻋﻨﺪﻣﺎ ﺗﺼﻤﻢ ﻓﻲ
HTMLاﻧﺖ ﺗﺼﻤﻢ واﺟﮫﺔ وﻟﻜﻨﮫﺎ ﺧﺎﻟﯿﺔ ﻣﻦ اﻟﺤﺮﻛﺔ ﺑﻞ اﻧﻚ ﻻ ﺗﺴﺘﻄﯿﻊ ان ﺗﻐﯿﺮ ﺷﻲء ﻣﻨﮫﺎ إﻻ ﺑﺎﻟﺘﻐﯿﺮ اﻟﻜﻮد
ﻧﻔﺴﻪ وﻟﻜﻦ ﺗﺨﯿﻞ ﻣﺜﻼ اﻧﻚ ﺗﺮﻳﺪ ان ﺗﻈﮫﺮ ﺑﻨﺮ اﻋﻼﻧﻲ ﻳﺘﻐﯿﺮ ﻛﻞ وﻗﺖ ﻣﻌﯿﻦ ﻣﻦ ﻏﯿﺮ ان ﺗﻠﻤﺴﻪ ﺑﯿﺪك اي ﻣﻦ
ﻏﯿﺮ ان ﺗﻐﯿﺮ اﻟﻜﻮد ﺑﻞ ھﻮ ﻣﻦ ﻧﻔﺴﻪ ﻳﺠﻠﺐ ﺑﻨﺮ اﻻﻋﻼن اﻻول ﺛﻢ ﺑﻌﺪ دﻗﯿﻘﺔ ﻣﺜﻼ ﻳﻐﯿﺮه اﻟﻰ ﺑﻨﺮ اﻋﻼن ﺛﺎﻧﻲ
وھﻜﺬا او ﺗﺼﻮر اﻧﻚ ﺗﺮﻳﺪ ان ﺗﻀﻊ ﻓﻲ رأس ﺻﻔﺤﺘﻚ اﻟﺘﺎرﻳﺦ واﻟﻮﻗﺖ او ﻛﺄن ﺗﺮﻳﺪ ان ﻳﻈﮫﺮ اﺳﻢ زاﺋﺮك ﻓﻲ
ﺻﻔﺤﺘﻚ ﻟﻜﻲ ﺗﺸﺪه ﻟﮫﺎ وﻏﯿﺮھﺎ ﻣﻦ اﻻﻓﻜﺎر ﻓﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﺗﻔﻌﻞ ﻟﻚ ﻛﻞ ھﺬا وﺑﻜﻞ ﺑﺴﺎﻃﻪ وﺳﮫﻮﻟﺔ ..
اﻣﺎ ﻓﻲ اﻟﺒﺮاﻣﺞ او اﻻﻛﻮاد اﻟﺘﻲ ﺳﻮف ﻧﺘﻌﻠﻢ ﻛﺘﺎﺑﺘﮫﺎ ھﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷواﻣﺮ اﻟﺘﻲ ﺗﻜﺘﺐ ﻣﺠﺘﻤﻌﺔ أو
ﻣﺘﻔﺮﻗﺔ ﻟﯿﻌﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺼﻮرﺗﺔ اﻟﺮﺋﯿﺴﯿﻪ وﻟﻨﻘﻞ ھﻲ اﻻﺳﺎس او اﻟﺒﻨﯿﺔ اﻟﺘﺤﺘﯿﺔ ﻟﺒﺮﻧﺎﻣﺠﻨﺎ وﻻ ﺗﻘﻠﻖ
ﺗﺴﺘﻄﯿﻊ ان ﺗﻜﺘﺐ ﺑﺮاﻣﺠﻚ او اﻛﻮادك ﻣﻦ ﺧﻼل ﺑﺮﻧﺎﻣﺞ ال NOTEBADاﻟﻤﺘﻮﻓﺮ ﻓﻲ ﻛﻞ ﺟﮫﺎز وإﻧﻨﻲ اﻓﻀﻞ ان
ﺗﺠﺪ ﻣﺤﺮر ﻟﻠﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻲ اﻻﻧﺘﺮﻧﺖ وھﺬا اﻓﻀﻞ ﻟﻜﻲ ﺗﻌﺮف ﻣﻮﻗﻊ اﻟﺨﻄﺄ ﻣﺒﺎﺷﺮة ﻣﻦ ﻏﯿﺮ ﻋﻨﺎء .
وﻓﻲ ﻧﮫﺎﻳﺔ اﻟﻤﻘﺪﻣﻪ ھﺬي ارﻳﺪ اﻟﺘﻨﺒﯿﻪ اﻟﻰ ﺷﻲء اراه ﻛﺜﯿﺮا ﻓﻲ اﻻﻧﺘﺮﻧﺖ وھﻮ ﻳﻮﺟﺪ ﻓﺮق ﻛﺒﯿﺮ ﻋﻨﺪﻣﺎ ﻧﻘﻮل
ھﺬا ﻛﻮد JAVAاو ﻛﻮد JAVASCRIPTﻓﺎﻻﺧﺘﻼف ﻛﺒﯿﺮ ﺑﯿﻨﮫﻢ وإن ﻛﺎن اﻟﻤﺴﻤﻰ ﻳﻮﺣﻲ ﺑﻐﯿﺮ ذﻟﻚ واﻳﻀﺎ ﻳﻮﺟﺪ
ﻓﺮق ﺑﺴﯿﻂ ﺑﯿﻦ ال DHTMLواﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ وإن ﻛﻨﺎ ﻧﺴﺘﺨﺪم ﻓﻲ DHTMاواﻣﺮ واﻛﻮاد ال JAVA SCRIPT
ﺑﻞ ﻳﻜﻮن اﻻﻋﺘﻤﺎد اﻟﻜﺒﯿﺮ ﻋﻠﯿﮫﺎ وﻟﻜﻦ ھﺬي ﻋﺰﻳﺰ اﻟﻤﺘﺪرب ﻟﻐﺔ اذا ﺟﺎز ﺗﺴﻤﯿﺘﮫﺎ ﺛﺎﻧﯿﻪ وﻟﮫﺎ ﺗﻄﺒﯿﻘﺎﺗﮫﺎ اﻟﺤﺮﻛﯿﺔ
واﻟﺘﺄﺛﯿﺮﻳﺔ اﻟﺨﺎﺻﻪ وإﻧﻲ ارى اﻛﺜﺮ اﻟﻤﻮاﻗﻊ ﺗﻌﺮض ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ اﻛﻮاد ﺟﺎھﺰه ﻟﻠﺘﺤﻤﯿﻞ او اﻟﻨﺴﺦ وﺗﻜﺘﺐ
ﻋﻨﮫﺎ اﻧﮫﺎ JAVASCRIPTوإﻧﻲ ارى ﻛﺜﯿﺮا ﻣﻨﮫﺎ ﺗﺴﻤﯿﺘﻪ اﻟﺼﺤﯿﺤﻪ DHTMLاي اﻟﺪاﻳﻨﻤﻚ وﻟﯿﺲ اﻟﺠﺎﻓﺎ
ﺳﻜﺮﺑﺖ واﻧﺎ اﻗﻮل ﻛﺜﯿﺮا ﻣﻨﮫﺎ وﻟﯿﺲ ﺟﻤﯿﻌﮫﺎ ..وﻧﺤﻦ ھﻨﺎ ﻟﺴﻨﺎ ﻓﻲ ﻣﺤﺾ اﻟﻤﻘﺎرﻧﻪ ال JAVASCRIPTوال
JAVAو DHTMLﻓﻠﻜﻼ ﻣﻨﮫﺎ اﻛﻮاده اﻟﺨﺎﺻﻪ واﺳﻠﻮﺑﻪ وﺗﻜﻨﯿﻜﻪ وﻳﺠﺐ ھﻨﺎ اﻟﺘﺒﯿﻪ ان ال JAVAﺑﻌﯿﺪة ﻛﻞ اﻟﺒﻌﺪ
ﻋﻦ ال JAVASCRIPTﻋﻠﻰ ﻋﻜﺲ ال DHTMLاﻟﻘﺮﻳﺒﺔ ﺟﺪا ﻓﻼ اﻗﺎرن ﺑﯿﻦ ال JAVAو ال DHTMLﻣﻊ ال
JAVASCRIPTوﻛﺎﻧﻨﻲ اﺳﺎوﻳﮫﻢ ﺑﺒﻌﺾ ﻓﺎل DHTMLﻗﺮﻳﺒﺔ ﺟﺪا او ﺗﺼﺐ ﻓﻲ ﻣﺼﺐ ﻧﻔﺴﻪ وﻟﻜﻦ ال JAVA
ﺑﻌﯿﺪة ﻛﻞ اﻟﺒﻌﺪ ﺑﻞ ﻻ ﻳﻮﺟﺪ ﻣﻘﺎرﻧﻪ وﻟﮫﺎ اﻋﻤﺎﻟﮫﺎ واﻛﻮادھﺎ اﻟﺨﺎﺻﻪ وﻋﻤﻠﮫﺎ اﻟﺨﺎص .
وﻳﻮﺟﺪ ﺑﻌﺾ اﻟﻤﻼﺣﻈﺎت اﻟﻤﮫﻤﻪ ﻗﺒﻞ اﻟﺒﺪء ﺑﺘﻌﻠﻢ JAVASCRIPTارﻏﺐ اﻟﺘﺒﯿﻪ ﻟﮫﺎ وﻟﻜﻲ ﻻ اذﻛﺮھﺎ ﻓﻲ
ﻣﺘﺼﻒ اﻟﻜﺘﺎب وﺗﺘﺸﺘﺖ اﻓﻜﺎرك .
§ ﻗﻤﺖ ﻓﻲ ﻫﺬا اﻟﻜﺘﺎب ﺑﺎﻟﺘﺪرج ﻋﻠﻰ اﺳﻠﻮﺑﻲ اﻟﺨﺎص ﻓﻲ ﺗﻌﻠﯿﻢ اﻟﻤﺘﺪرب ﻫﺬه اﻟﻠﻐﺔ وﻫﺬا اﺟﺘﻬﺎد ﻣﻨﻲ ﻟﻬﺪﻓﯿﻦ ﻫﻮ ﺷﺪ
اﻟﻤﺘﺪرب ﻋﻠﻰ اﻻﺳﺘﻤﺮار ﻓﻲ اﻟﺘﻌﻠﻢ واﺧﺬ اﻟﻔﺎﺋﺪه اﻟﺘﻲ ﯾﺮﺟﻮﻫﺎ ﻣﻦ اول ﺻﻔﺤﺔ ﯾﻘﺮأﻫﺎ وﻟﻬﺬا ﻛﺎن ﻟﻲ اﺟﺘﻬﺎدي
اﻟﺨﺎص ﻓﻲ اﻟﺘﺪرج ﻓﻲ ﺻﺐ اﻟﻤﻌﻠﻮﻣﻪ وﻗﺪ اﺳﺘﺨﺪﻣﺖ ﻋﺒﺎرة اذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ ﻛﺜﯿﺮا وﻫﻨﺎ اﻛﻮن ﻗﺪ ﺗﺠﺎوزت ﻓﻲ
ﻋﺒﺎرة ﻣﻌﯿﻨﻪ ﻓﻲ ﻣﻮﺻﻔﻬﺎ ﻋﻦ وﺻﻔﻬﺎ اﻟﺒﺮﻣﺠﻲ اﻟﺒﺤﺚ وﻫﺬا ﻟﻐﺮض إﯾﺼﺎل اﻟﻤﻌﻠﻮﻣﻪ وﻫﺬا اﻟﺬي ﯾﻬﻤﻨﻲ ﻛﺜﯿﺮا..
ﻟﺬﻟﻚ اﺳﺘﺨﺪم ﻫﺬه اﻟﻌﺒﺎرة ﻓﻲ اﻣﺎﻛﻦ ﻣﻌﯿﻨﻪ .
§ ﺳﻮف ﻧﺘﻄﺮق ﻓﻲ ﻧﻬﺎﯾﺔ اﻟﻜﺘﺎب اﻟﻰ اﻟﻜﺎﺋﻨﺎت اي ال Objectوﺳﻮف اﻛﺘﺐ ﻟﻚ ﻣﻘﺪﻣﺔ ﻋﻨﻬﺎ ﻫﻨﺎ ﻟﻜﻲ ﺗﻜﻮن ﻋﻠﻰ
ﻋﻠﻢ ﺑﻬﺎ وﻣﺎ ﻫﯿﺘﻬﺎ .ال .Object.ﻛﺎﺋﻦ ﯾﺤﺘﻮي ﻋﻠﻲ ﺧﻮاص ،وﻣﻨﻪ ﻃﺮق ﺗﺘﯿﺢ ﻟﻚ اﺳﺘﺨﺪام ﺗﻠﻚ اﻟﺨﻮاص
ﻋﻠﻲ ﺑﯿﺎﻧﺎت ﻣﺤﺪدة وﻣﻌﯿﻨﻪ ﻣﻤﺎ ﯾﻌﻄﻲ ﻗﻮة ﻛﺒﯿﺮة ﻧﻮﻋﺎ ﻣﺎ ﻟﻠﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﺑﻞ ﻫﻲ ﻗﺎﺋﻤﻪ ﻋﻠﻰ ذﻟﻚ وﻣﺎ ﯾﻨﻌﻜﺲ
ﻋﻠﯿﻬﺎ اي ال JAVASCRIPTﻣﻦ ﺑﺴﺎﻃﺔ ﺗﺼﻤﯿﻢ ﺑﺮاﻣﺠﻬﺎ وﺳﻬﻮﻟﺔ وﺳﻼﺳﺔ ﺗﻄﻮﯾﺮﻫﺎ ﻳﺸﺎر أﺣﯿﺎﻧﺎ ﻟﻠﻐﺎت
اﻟﺘﻲ ﺗﺘﯿﺢ اﺳﺘﺨﺪام اﻟﻜﺎﺋﻨﺎت ﺑﻜﺎﻣﻞ ﺧﺼﺎﺋﺼﻬﺎ ﻋﻠﻲ إﻧﻬﺎ ﻟﻐﺎت ﺑﺮﻣﺠﺔ ﻣﻮﺟﻬﺎ ﻟﻠﻜﺎﺋﻨﺎت OOPﻣﺜﻞ اﻟﺠﺎﻓﺎ و
اﻟﺴﻲ ++اﻟﻰ ﻏﯿﺮﻫﺎ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﻪ وﻻ ارﯾﺪ ان اﺧﻮض ﺑﺘﺎرﯾﺨﻬﺎ وادﺧﻞ ﺑﻚ اﻟﻰ ﺻﻔﺤﺎت ﻋﺪه وأرﻫﻘﻚ
ﻓﻲ اﻟﻘﺮاءة واﻧﺖ ﻟﻢ ﺗﺒﺪأ ﺑﻌﺪ وﻟﻜﻦ اﻧﺼﺤﻚ ﺑﺎﻟﻘﺮاءة ﻋﻨﻬﺎ ﻓﻲ اﻻﻧﺘﺮﻧﺖ ﻓﻜﻞ ﺷﻲء ﯾﻌﺘﺒﺮ ﻣﺮﺟﻊ ﻣﻔﯿﺪ ﻟﻚ ﺣﺘﻰ
ﻟﻮ ﻛﺎﻧﺖ ﻣﻌﻠﻮﻣﺔ واﺣﺪه .
§ اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزة وﺳﻮف اذﻛﺮﻫﺎ ﻟﻚ ﻓﻜﻤﺎ ﻓﻲ ﺟﻤﯿﻊ اﻟﻠﻐﺎت ﯾﻮﺟﺪ ﻫﻨﺎك ﻛﻠﻤﺎت ﻣﺤﺠﻮزة اي
Keywordsوﺳﻤﯿﺖ ﻛﺬﻟﻚ ﻟﻜﻲ ﻻ ﺗﺴﺘﺨﺪم إﻻ ﺑﻤﻮاﻗﻊ ﺧﺎﺻﻪ ﻓﻲ ﻛﻮد اﻟﻠﻐﺔ وﻟﯿﺲ ﻛﻤﺴﻤﯿﺎت ﺗﺴﺘﺨﺪﻣﻬﺎ .
وﻫﻲ ﻛﻠﻤﺎت ﺧﺎﺻﻪ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺎت ووﻇﺎﺋﻒ ﻣﻌﯿﻨﻪ ﻋﻠﻰ ﻣﺘﻐﯿﺮات اﺳﻨﺪت او ﻣﺮرت ﻟﻬﺎ اذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ
ﻟﺬﻟﻚ ﻣﺜﻼ ﻻ ﯾﺠﻮز اﺳﺘﺨﺪام اﯾﺎ ﻣﻨﻬﺎ ﻓﻲ اﺳﻢ داﻟﺔ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل او ﻏﯿﺮﻫﺎ ﺑﻞ اﺑﺘﻌﺪ ﻓﻲ ﺗﻤﺴﺎﺗﻚ اﻟﺨﺎﺻﻪ
ﻋﻦ ﻫﺬه اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزة اذا ﻣﺎ ﻫﻲ اﻟﻜﻠﻤﺎت اﻟﺤﺠﻮزة ﻓﻲ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ؟ ﻫﻲ :
ﻻ ﺗﻨﺰﻋﺞ ﻣﻦ ﻋﺪم ﻓﻬﻤﻚ ﺑﻌﺾ اﻟﻤﻼﺣﻈﺎت ﻓﻬﺬا اﻣﺮ ﻃﺒﯿﻌﻲ وﻟﻜﻨﻨﻲ اذﻛﺮﻫﺎ ﻓﻘﻂ ﻟﻚ ﻟﺘﻌﻠﻢ ﺑﻬﺎ وﻓﻲ اﺛﻨﺎء ﻗﺮاءﺗﻚ
اﻟﻜﺘﺎب ﺳﻮف ﺗﻌﺮف ﻣﺎ ﻗﺼﺪﺗﻪ ﻓﻲ ﻫﺬه اﻟﻤﻼﺣﻈﺎت .
اﻋﺬروﻧﻲ اذا ﺗﺠﺎوزت ﻓﻲ ﺷﺮﺣﻲ ﻓﻲ ﺑﻌﺾ اﻟﻌﺒﺎرات ﻓﻲ اﺛﻨﺎء ﺷﺮﺣﻲ ﻓﻲ اﻟﻜﺘﺎب ﻓﻬﺪﻓﻲ ﻫﻮ إﯾﺼﺎل اﻟﻤﻌﻠﻮﻣﻪ
وﻟﯿﺲ ﻋﺮض اﻟﻌﻀﻼت اﻟﺒﺮﻣﺠﯿﻪ واﻟﻤﺼﻄﻠﺤﺎت اﻟﻤﻌﻘﺪه وﺧﺼﻮﺻﺎ اﻧﻨﻲ ﻟﺴﺖ ﻣﻦ اﻟﻨﺎس اﻟﺬﯾﻦ ﯾﻔﻀﻠﻮن
اﻟﺘﻌﺮﯾﺐ ﻓﻲ ﻣﻮاﻗﻊ ﻣﻌﯿﻨﻪ وذﻟﻚ ﻻن ﻋﻨﺪ ﺗﻌﺮﯾﺐ ﻣﺼﻄﻠﺤﺎت ﻣﻌﯿﻨﻪ ﺗﻔﻘﺪ ﻣﻌﻨﺎﻫﺎ اﻟﺼﺤﯿﺢ ﻣﻊ اﻋﺘﺰازﻧﺎ ﻓﻲ ﻟﻐﺘﻨﺎ
اﻟﻌﺮﺑﯿﺔ اﻟﻠﻐﺔ اﻷم ﻟﺬﻟﻚ ﻛﻨﺖ اﻋﺮﺑﻬﺎ اﺣﯿﺎﻧﻨﺎ ﻟﯿﺲ ﺣﺮﻓﯿﺎ ﺑﻞ ﺣﺴﺐ ﻣﺎ ﯾﻤﻜﻦ ان ﺗﺼﻠﻚ اﻟﻤﻌﻠﻮﻣﻪ وﻫﺬا ﻣﺎ ﯾﻬﻤﻨﻲ
ﻓﻜﺜﯿﺮا ﻣﺎ ﻧﻘﺮأ ﻛﺘﺐ راﺋﻌﻪ ﺗﺤﻤﻞ ﻣﺼﻄﻠﺤﺎت ﻋﺪه وزﺧﻢ ﺑﺮﻣﺠﻲ اﺻﻄﻼﺣﻲ وﻓﻠﺴﻔﻲ وﻟﻜﻦ ﻣﺎذا ﻧﺨﺮج ﺑﺎﻻﺧﺮ ﻻ
ﺷﻲء وﻣﺎ اﻛﺜﺮ اﻟﻜﺘﺐ ﻓﻲ ذﻟﻚ ﻟﺬﻟﻚ اذا اﻟﺒﺴﺎﻃﻪ ﺧﯿﺮ ﺳﺒﯿﻞ وإن ﻛﺎن ﻫﻨﺎك ﻣﻦ ﯾﻌﺘﺮض ﻋﻠﯿﻬﺎ .
§ ﻟﻢ اﺿﻊ ﻟﻬﺬا اﻟﻜﺘﺎب ﻓﻬﺮس ﻣﻔﺼﻞ ﻻن ﻣﻦ وﺟﻬﺔ ﻧﻈﺮي ان اﻟﻜﺘﺐ اﻟﺘﻲ اﺻﺪرﻫﺎ ﻫﻲ ﺑﻤﺜﺎﺑﺔ دورات ﺗﺪرﯾﺒﯿﺔ
ﺗﻌﺘﻤﺪ اﺳﻠﻮب اﻟﻤﺨﺎﻃﺒﻪ واﻻﺗﺼﺎل ﺑﺎﻟﻤﺘﺪرب واﻟﺘﺪرج ﺑﻪ ﺣﺴﺐ ﺗﻔﻜﯿﺮه واﻹﺟﺎﺑﺔ ﻋﻠﻰ ﻛﻞ ﻣﺎ ﯾﺠﻮل ﻓﻲ ﺧﺎﻃﺮه
ﻗﺪ ﯾﻜﻮن ﻫﻨﺎك اﺣﺪ ﻟﻪ وﺟﻬﺔ ﻧﻈﺮ اﺧﺮى وﻟﻜﻦ ﻟﻜﻼ ﻣﻨﺎ اﺳﻠﻮﺑﻪ اﻟﺨﺎص ﺑﻪ ﻛﻤﺎ اﻧﻨﻲ اﻋﺘﻤﺪت ﻋﻠﻰ ﺟﻌﻞ ﺑﻌﺾ
اﻷﻣﺜﻠﺔ اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ارﻗﺎم ﺗﺒﺪأ ﻣﻦ اﻟﯿﺴﺎر اﻟﻰ اﻟﯿﻤﯿﻦ ﺗﺴﺘﻄﯿﻊ ﻗﻠﺐ ذﻟﻚ ﺑﻮﺿﻊ dir = rtlﻓﻲ وﺳﻢ ال
htmlﺑﺒﺪاﯾﺔ اﻟﺼﻔﺤﺔ .
§ ﻣﻼﺣﻈﺔ ﻣﻬﻤﺔ :ارﺟﻮ ﻋﺪم ﻧﺴﺦ اﻟﻜﻮد ﻓﻲ اﻟﻜﺘﺎب ووﺿﻌﻪ ﻓﻲ ال Notepadﻣﺒﺎﺷﺮة ﻓﻘﺪ ﻻ ﯾﻨﻔﺬ ﻣﻌﻚ
وذﻟﻚ ﻻﻧﻨﻲ اﺣﯿﺎﻧﻨﺎ اﺗﺮك ﻓﺮاﻏﺎ ﺑﯿﻦ ﻓﺎﺻﻠﻪ او ﻧﻘﻄﻪ او ﻛﻠﻤﺔ او ﻗﻮس او ﻣﺎ ﺷﺎﺑﻪ ذﻟﻚ وﻫﺬا ﺑﺴﺒﺐ اﻧﻨﻲ اﻛﺘﺐ
اﻟﻜﻮد ﻓﻲ ﺑﺮﻧﺎﻣﺞ ال wordﻓﻼ ﯾﺒﺪو اﻟﻔﺮاغ واﺿﺢ ﻓﺄﺿﻄﺮ اﻟﻰ ﺟﻌﻠﻪ ﻓﺮاﻏﯿﻦ او اﻛﺜﺮ ﻟﻜﻲ ﺗﺮاه اﻧﺖ اﻧﻪ
ﻓﺮاغ واﺣﺪ وﻣﻦ ﻫﻨﺎ ﻛﻞ اﻟﺒﺮاﻣﺞ اﻟﻤﻮﺟﻮده اﻟﺘﻲ ﻛﺘﺒﺖ ﻓﻲ اﻟﻜﺘﺎب ﻣﺮﻓﻘﻪ ﻣﻊ اﻟﻜﺘﺎب ﻛﺼﻔﺤﺎت اﻧﺘﺮﻧﺖ ﺗﺴﺘﻄﯿﻊ
اﺳﺘﺨﺪاﻣﻬﺎ ﺑﺪﻻ ﻣﻦ اﻟﻨﺴﺦ ﻣﺒﺎﺷﺮة واﻟﻠﺼﻖ .
§ ﻃﺮق ﻛﺘﺎﺑﺔ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ..
-١اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ :
ﯾﺠﺪرﺑﻨﺎ اﻟﻤﻌﺮﻓﺔ ﻫﻨﺎ ان ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﺗﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺘﻪ ﺑﺒﺮﻧﺎﻣﺞ ) ( notepadاو ﺑﺄي ﻣﺤﺮر اﺧﺮ
ﻣﺨﺘﺺ ﺑﻜﺘﺎﺑﺔ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ .
ﯾﻜﺘﺐ ﻋﺎدة ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻲ رأس ﺻﻔﺤﺔ ) ( htmlاي ﺑﯿﻦ وﺳﻤﻲ رأس اﻟﺼﻔﺤﺔ :
) >( <head> ----------- </head
ﻣﻼﺣﻈﺔ :
ﻗﺪ ﯾﻀﻊ اﻟﺒﻌﺾ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻓﻲ ذﯾﻞ اﻟﺼﻔﺤﺔ او ﻓﻲ ﺟﺴﻤﻬﺎ وﻫﺬا وارد اﻟﺤﺪوث ..
></html
اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ :ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ ﻻ ﯾﻘﻊ ﻋﻠﯿﻬﺎ ﺗﺄﺛﯿﺮ اي وﺳﻢ ﻣﻦ وﺳﻮم اﻟـ ) ... ( html
١
اﻟﻄﺮﯾﻘﺔ اﻟﺜﺎﻧﯿﺔ :ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ ﯾﻘﻊ ﻋﻠﯿﻬﺎ ﺗﺄﺛﯿﺮ وﺳﻢ ال ) ... ( html
;)"> </h1ﻫﻨﺎ اﻟﺠﻤﻠﺔ اﻟﻤﺮاد ﻃﺒﺎﻋﺘﻬﺎ >document.write("<h1
اﻟﻄﺮﯾﻘﺔ اﻟﺜﺎﻟﺜﺔ :ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ ﯾﻘﻊ ﻋﻠﯿﻬﺎ ﺗﺄﺛﯿﺮ وﺳﻢ ال ) ( htmو ال ) ... ( style
;)"> </h1ﻫﻨﺎ اﻟﺠﻤﻠﺔ اﻟﻤﺮاد ﻃﺒﺎﻋﺘﻬﺎ >"\document.write("<h1 style=\"color : red
اﻟﻄﺮﯾﻘﺔ اﻟﺴﺎدﺳﺔ :ﻃﺒﺎﻋﺔ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ ﯾﺴﺒﻘﻪ وﯾﻌﻘﺒﻪ ﺟﻤﻠﺔ ﻧﺼﯿﺔ ..
ﻣﺜﻼ ...ﺟﺎء اﻟﻨﺺ ﻗﺒﻞ اﻟﻤﺘﻐﯿﺮ ﻧﻀﻊ اﺷﺎرة اﻟـ ) ( +ﻗﺒﻞ اﻟﻤﺘﻐﯿﺮ
ﻣﺜﻼ ...ﺟﺎء اﻟﻨﺺ ﺑﻌﺪ اﻟﻤﺘﻐﯿﺮ ﻧﻀﻊ اﺷﺎرة اﻟـ ) ( +ﺑﻌﺪ اﻟﻤﺘﻐﯿﺮ
ﻣﺜﻼ ...ﺟﺎء اﻟﻨﺺ ﺑﻌﺪ اﻟﻤﺘﻐﯿﺮ وﻗﺒﻠﻪ ﻧﻀﻊ اﺷﺎرة ال ) ( +ﺑﻌﺪ اﻟﻤﺘﻐﯿﺮ وﻗﺒﻠﻪ ..
٢
ﯾﻌﻨﻲ ﺑﺈﺧﺘﺼﺎر ﺿﻊ اﺷﺎرة ) ( +ﺑﺠﺎﻧﺐ اﻟﻤﺘﻐﯿﺮ اﻟﻤﺮاد ﻃﺒﺎﻋﺘﻪ ﻣﻦ اﻟﺠﻬﺔ اﻟﺘﻲ ﺑﻬﺎ اﻟﺠﻤﻠﺔ اﻟﻨﺼﯿﺔ واذا ﻟﻢ ﯾﻜﻦ
ﻫﻨﺎك ﺟﻤﻠﺔ ﻧﺼﯿﺔ اذا ﻻ ﺗﻀﻊ اﺷﺎرة ) ( +
ﺳﻮف ﻧﺬﻛﺮ ﻣﺎ ﻫﻮ اﻟﻤﺘﻐﯿﺮ وﻣﺎ ﻧﻘﺼﺪ ﺑﻪ ﻻﺣﻘﺎ ﻓﻼ ﺗﻘﻠﻖ ﻓﻤﺎ ﻋﻠﯿﻚ ﺳﻮى ﻣﻌﺮﻓﺔ ﻃﺒﺎﻋﺘﻪ اﻣﺎ ﻣﺎ ﻫﻮ وﻷي ﻏﺮض
ﯾﺴﺘﺨﺪم ﺳﻮف ﺗﻌﺮف ﻻﺣﻘﺎ ..
oﻟﻄﺒﺎﻋﺔ ﺟﻤﻠﺔ ﻓﻲ ﺳﻄﺮﯾﻦ اي " اﻟﻨﺰول اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ " ﻧﻀﻊ ﺑﺪاﺧﻞ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ )> (<br /ﻗﺒﻞ اﻟﺠﻤﻠﺔ
اﻟﺘﻲ ﺗﺮﯾﺪ ان ﻧﺠﻌﻠﻬﺎ ﻓﻲ ﺳﻄﺮ ﺟﺪﯾﺪ ..
ﻣﺜﻞ :
;)" document.write(" Arab <br />Top
-٢ﺧﺮوج ﻧﺎﻓﺬة ﻟﻠﻤﺴﺘﺨﺪم ﻧﺤﺪد ﻧﺤﻦ ﻣﺎ ﯾﻜﺘﺐ ﺑﻬﺎ وﻫﻲ ﺧﺎﺻﻪ ﻓﻲ ﻛﺎﺋﻨﺎت اﻟﻨﻮاﻓﺬ .Window Object
وﺗﺴﻤﻰ ﻫﺬه اﻟﻨﺎﻓﺬة ﺑﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ) ( alertوﯾﻜﺘﺐ ﻛﻮدﻫﺎ ﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ ...
٣
-٣ﺧﺮوج ﻧﺎﻓﺬة ﻟﻠﻤﺴﺘﺨﺪم ﯾﺤﺪد ﻫﻮ ﻣﺎ ﯾﻜﺘﺐ ﺑﻬﺎ " اي ﻧﺎﻓﺬه ﻗﺮاءة ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ " وﻫﻲ ﺧﺎﺻﻪ ﺑﻜﺎﺋﻨﺎت
اﻟﻨﻮاﻓﺬ . Window Object
وﺗﺴﻤﻰ ﻫﺬه اﻟﻨﺎﻓﺬة ﺑﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ) ( promptوﯾﻜﺘﺐ ﻛﻮدﻫﺎ ﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ ...
ﻣﻼﺣﻈﺔ :
ﯾﺄﺧﺬ ﻛﻮد اﻟـ ) ( promptﺑﺪاﺧﻠﻪ ﻗﯿﻤﺘﯿﻦ اﻻوﻟﻰ ﯾﻜﺘﺐ ﺑﻬﺎ ﻣﺎ ﺳﻮف ﯾﺨﺮج ﻟﻠﻤﺴﺘﺨﺪم ﻓﻲ أﻋﻠﻰ اﻟﻨﺎﻓﺬة ..واﻟﻘﯿﻤﺔ
اﻟﺜﺎﻧﯿﺔ ﯾﻜﺘﺐ ﺑﻬﺎ ﻗﯿﻤﺔ اﺑﺘﺪاﺋﯿﺔ ﺑﺪاﺧﻞ ﺻﻨﺪوق اﻟﻜﺘﺎﺑﺔ وﻫﺬه اﻟﻘﯿﻤﺔ ﻟﯿﺲ ﻟﻬﺎ اي ﻗﯿﻤﺔ ﻓﻌﻠﯿﺔ ﻓﻬﻲ ﻣﺎ ﺗﻠﺒﺚ ﺣﺘﻰ ﯾﻨﺘﻬﻲ
دورﻫﺎ ﺑﻤﺠﺮد ان ﯾﻜﺘﺐ اﻟﻤﺴﺘﺨﺪم ﻣﻜﺎﻧﻬﺎ اﺳﻤﻪ او اي ﺷﻲء ﯾﺮﯾﺪه ...ﺟﺮب ان ﺗﻀﻊ ﻫﺬا اﻻﻣﺮ وإﻧﻈﺮ ﻣﺎذا
ﯾﺨﺮج ﻟﻚ واﻟﺬي ﯾﻌﺘﺒﺮ اﯾﻀﺎ ﻣﻦ ﻛﺎﺋﻨﺎت اﻟﻨﻮاﻓﺬ Window Object
وﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻧﺎﻓﺬة ﺗﺨﺮج ﻟﻠﻤﺴﺘﺨﺪم ﻟﺴﺆاﻟﻪ ﻋﻦ ﻗﺒﻮل أو رﻓﺾ ﺷﻲء ﻣﻌﯿﻦ أﻧﺖ ﺗﺤﺪده .
ﻣﺜﺎل :
; var name
وﯾﺠﺪر اﻟﺘﻨﺒﯿﻪ ﻫﻨﺎ اﻧﻪ أذا اردﻧﺎ أن ﯾﻜﻮن اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ رﻗﻤﯿﺔ ) " ( integer Or floatأﻋﺪاد ﺻﺤﯿﺤﺔ أو
أﻋﺪاد ذات أرﻗﺎم ﻋﺸﺮﯾﺔ " ﻓﺈﻧﻨﺎ ﻧﻘﻮم ﺑﺘﺤﻮﯾﻠﻬﺎ ﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ :
; ) أﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻫﻨﺎ ( 1- parseInt
وﻫﺬا ﺳﻮف ﯾﺤﻮل اﻟﻌﺪد اﻟﻰ ﻋﺪد ﺻﺤﯿﺢ ) ( integerأي ﯾﻜﻮن ﻛﺘﺎﺑﺔ اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ :
٤
; ) أﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻫﻨﺎ ( 2- parseFloat
وﻫﺬا ﺳﻮف ﯾﺤﻮل اﻟﻌﺪد اﻟﻰ ﻋﺪد ﻋﺸﺮي ) ( floatأي ﯾﻜﻮن ﻛﺘﺎﺑﺔ اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ :
ﻣﻼﺣﻈﺔ :
ﻣﺜﺎل : ١
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
><script
; var name
; ) "إﺳﻤﻚ" " ,ﻟﻄﻔﺎ أدﺧﻞ إﺳﻤﻚ" ( name = window.prompt
; ) " + nameأﻫﻼ ﺑﻚ " (document.write
></script
></head
><body> </body
></html
٥
ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﻗﻤﻨﺎ ﺑﻤﺎ ﯾﻠﻲ :
ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮ وﺟﻌﻠﻨﺎ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻫﻮ ) . ( name
ﺟﻌﻠﻨﺎ ﻫﺬا اﻟﻤﺘﻐﯿﺮ ﯾﺴﺎوي اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﻮف ﯾﺪﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ وذﻟﻚ ﻣﻦ ﺧﻼل اﻷﻣﺮ
) . ( window.promptﻓﺒﻤﺠﺮد ﺧﺮوج اﻟﻨﺎﻓﺬة ﻟﻠﻤﺴﺘﺨﺪم وﯾﻜﺘﺐ ﺑﻬﺎ اﺳﻤﻪ ﺳﻮف ﯾﺨﺰن اﻷﺳﻢ اﻟﻤﺪﺧﻞ
ﺑﺪاﺧﻞ اﻟﻤﺘﻐﯿﺮ ) ( nameوﻫﺬا واﺿﺢ ﻣﻦ اﻟﻌﺒﺎرة :
; ) "إﺳﻤﻚ" ",ﻟﻄﻔﺎ أدﺧﻞ إﺳﻤﻚ" ( name = window.prompt
وﺑﺎﻟﺘﺎﻟﻲ ﺳﻮف ﯾﻄﺒﻊ ﻟﻨﺎ ﻣﺎ ﺧﺰن داﺧﻞ اﻟﻤﺘﻐﯿﺮ وﻫﻮ إﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي أدﺧﻠﻪ .وﺑﻌﺪ ذﻟﻚ ﺳﻮف ﯾﻄﺒﻊ اﻟﺠﻤﻠﺔ
اﻟﻨﺼﯿﺔ اﻟﺘﻲ ﻛﺘﺒﻨﺎﻫﺎ وﻫﻲ " أﻫﻼ ﺑﻚ " ...أي ﺳﻮف ﯾﻄﺒﻊ ﻟﻨﺎ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ﻋﻠﻰ ﻓﺮض اﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺈدﺧﺎل اﻹﺳﻢ
" أﻫﻼ ﺑﻚ ﻣﺤﻤﺪ " " ﻣﺤﻤﺪ " :
ﻣﺜﺎل : ٢
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ><head><title
> "<script type = "text/javascript
; )"أﻫﻼ ﺑﻚ"( window.alert
></script
></head
><body></body
></html
وﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﺧﺮوج ﻧﺎﻓﺬه ﻟﻠﻤﺴﺘﺨﺪم وﻫﻲ ﻧﺎﻓﺬة ) ( alertاﻟﺘﻲ ذﻛﺮﻧﺎﻫﺎ ﺳﺎﺑﻘﺎ ..
٦
اﻟﻌﻤﻠﯿﺎت اﻟﻤﻨﻄﻘﯿﺔ : §
ﻣﻼﺣﻈﺔ :
ﯾﻮﺟﺪ أوﻟﻮﯾﺎت ﺗﻌﺘﻤﺪ ﻓﻲ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ اﻟﺒﺮﻣﺠﯿﺔ.
اﻟﻤﺘﻐﯿﺮ ) ( numberﻛﺎن ﯾﺤﻤﻞ اﻟﻘﯿﻤﺔ ) ( 4ﺛﻢ أﺿﻔﻨﺎ ﻟﻪ ) ( 2ﻓﺄﺻﺒﺢ اﻟﻨﺎﺗﺞ ) .( 6
وﯾﻤﻜﻦ أن ﻧﻜﺘﺐ اﻟﻌﻤﻠﯿﺎت اﻟﺴﺎﺑﻘﺔ ﺑﻄﺮﯾﻘﺔ ﺑﺮﻣﺠﯿﺔ أﺧﺮى وﺳﻮف ﯾﺨﺮج ﻟﻨﺎ ﻧﻔﺲ اﻟﻨﺎﺗﺞ :
وﻣﺎ ﯾﻨﻄﺒﻖ ﻋﻠﻰ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ﯾﻨﻄﺒﻖ ﻋﻠﻰ ﺟﻤﯿﻊ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ اﻷﺧﺮى ....
ﻣﺜﺎل :
وﻫﻲ ﻋﻤﻠﯿﺔ ﺿﺮب وﺿﻌﻨﺎ ﺑﺪاﺧﻞ اﻟﻤﺘﻐﯿﺮ ) ( numberﻗﯿﻤﺔ ) ( 4ﺛﻢ اﺟﺮﯾﻨﺎ ﻋﻤﻠﯿﺔ اﻟﻀﺮب ﻋﻠﻰ ﻫﺬا
اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﯾﺤﺘﻮي ﻋﻠﻰ ) ( 4وﻫﻲ ﺿﺮﺑﻪ ﺑﻨﻔﺴﻪ وﺑﺎﻟﺘﺎﻟﻲ اﻟﻨﺎﺗﺞ ﻫﻨﺎ ﯾﺴﺎوي ) .( 16
٧
§ ﺟﻤﻞ اﻟﺸﺮط :
ﻗﺪ ﻧﺤﺘﺎج أﺛﻨﺎء ﻛﺘﺎﺑﺘﻨﺎ ﻟﻠﺒﺮﻧﺎﻣﺞ أن ﻧﻀﻊ ﺟﻤﻠﺔ ﺷﺮط أو أﻛﺜﺮ ﺑﻪ ﻓﺒﻨﺎﺗﺞ ﺟﻤﻠﺔ اﻟﺸﺮط ﻧﺴﺘﻄﯿﻊ أن ﻧﺘﺤﻘﻖ ﻣﻦ
اﻟﻤﻄﺎﺑﻘﺔ أو ﻋﺪﻣﻬﺎ ..إذا ﻫﻲ ﻣﻘﺎرﻧﺔ ﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ ﻗﺪ ﯾﺘﻄﺎﺑﻘﻮا وﻋﻨﺪﻫﺎ ﯾﻜﻮن اﻟﺠﻮاب ) ( Trueأي ﺻﺤﯿﺢ أو ﻗﺪ
ﻻ ﯾﺘﻄﺎﺑﻘﻮا وﻋﻨﺪﻫﺎ ﯾﻜﻮن اﻟﺠﻮاب ) ( Falseأي ﺧﺎﻃﺊ .
وﻟﺘﻮﺿﯿﺢ اﻟﺼﻮرة ،ﻛﺄن ﻧﺘﺤﻘﻖ ﻣﻦ ﻛﻠﻤﺔ اﻟﺴﺮ ﻫﻞ ﻫﻲ ﺻﺤﯿﺤﺔ أم ﻻ إذا ﻫﻨﺎ ﺳﻮف ﯾﻜﻮن ﻟﺪﯾﻨﺎ ﻛﻠﻤﺘﯿﻦ ﺳﻮف
ﻧﻘﺎرن ﺑﯿﻨﻬﻤﺎ وﻫﻤﺎ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﻤﺴﺠﻠﺔ ﻟﺪﯾﻨﺎ وﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺘﻲ ﺳﻮف ﯾﺪﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم .
ﺻﯿﻐﺘﻬﺎ:
) اﻟﺸﺮط ( If
{
إذا ﺗﺤﻘﻖ ــ ﻧﻔﺬ اﻻﻣﺮ اﻟﺬي ﺑﺪاﺧﻞ اﻟﺪاﻟﺔ
}
أواﻣﺮ ﺧﺎرج اﻟﺪاﻟﺔ
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type ="text/javascript
;"var pass_2="okman
;var pass_user
;)"ﻛﻠﻤﺔ اﻟﺴﺮ"",ادﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ"(pass_user = window.prompt
)if (pass_2 == pass_user
{
; )" أﻫﻼ ﺑﻚ "( document.write
}
></script
></head
><body></body
></html
٨
ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ ) ( pass_2ووﺿﻌﻨﺎ ﺑﺪاﺧﻠﻪ ﻗﯿﻤﺔ ) ( okmanﺛﻢ ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ
) ( pass_userوﻟﻢ ﻧﻀﻊ ﺑﺪاﺧﻠﻪ ﻗﯿﻤﺔ ﻋﻠﻰ اﺳﺎس ان اﻟﻤﺴﺘﺨﺪم اي اﻟﺰاﺋﺮ ﻫﻮ اﻟﺬي ﺳﻮف ﯾﻀﻊ اﻟﻘﯿﻤﺔ وﻫﻨﺎ
ﺳﻮف ﺗﺨﺮج ﻧﺎﻓﺬة ﻟﺘﺨﺒﺮ اﻟﻤﺴﺘﺨﺪم ان ﯾﺪﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ وﻋﻨﺪﻫﺎ ﯾﻀﻊ اﻟﻤﺴﺘﺨﺪم اﻟﻜﻠﻤﺔ وﺑﺎﻟﺘﺎﻟﻲ ﺳﻮف ﺗﺨﺰن ﻫﺬه
اﻟﻘﯿﻤﺔ ﺑﺪاﺧﻞ اﻟﻤﺘﻐﯿﺮ ) ( pass_userوﺑﻌﺪ ذﻟﻚ ﻧﺪﺧﻞ ﺑﺪاﺧﻞ ﺟﻤﻠﺔ اﻟﺸﺮط وﻫﻲ اﻟـ ) ( ifوﻫﻨﺎ ﺳﻮف ﯾﻘﺎرن
ﺑﯿﻦ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_2اﻟﻤﺨﺰﻧﻪ ﻣﺴﺒﻘﺎ وﺑﯿﻦ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_userاﻟﺬي ﺣﺪد ﻗﯿﻤﺘﻪ
اﻟﻤﺴﺘﺨﺪم اذا ﺟﻤﻠﺔ ) ) ( if ( pass_2==pass_userﺗﻌﻨﻲ ﻫﻞ اﻟﻤﺘﻐﯿﺮ ) ( pass_2اﻟﻤﺨﺰن ﻣﺴﺒﻘﺎ
ﯾﺴﺎوي ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_userاﻟﻤﺪﺧﻠﺔ ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم ..ﻫﻨﺎ اذا ﻛﺎﻧﺖ اﻻﺟﺎﺑﻪ ﻧﻌﻢ ﻋﻨﺪﻫﺎ ﺳﻮف
ﯾﻄﺒﻊ ﻟﻪ ﺟﻤﻠﺔ أﻫﻼ ﺑﻚ واذا ﻛﺎﻧﺖ ﻻ اي ﻏﯿﺮ ﻣﺘﺴﺎوﯾﺘﯿﻦ اي ان ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺬي ادﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻟﯿﺴﺖ ﻣﺘﻄﺎﺑﻘﺔ
ﻣﻊ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﻤﺨﺰﻧﻪ ﻣﺴﺒﻘﺎ ...ﻋﻨﺪﻫﺎ ﻟﻦ ﯾﻄﺒﻊ ﺷﻲء ..وﻓﻲ ﻫﺬا اﻟﻤﺜﺎل اﻓﺘﺮﺿﻨﺎ اﻧﻪ ادﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ
ﺻﺤﯿﺤﻪ" اﻗﺼﺪ ﻫﻨﺎ ﻓﻲ ﺻﻮرة اﻟﻤﺜﺎل" ..
اﻻوﻟﻰ :
ﺗﺤﻘﻖ اﻟﺸﺮط وﺑﺎﻟﺘﺎﻟﻲ اﻟﺪﺧﻮل اﻟﻰ داﺧﻞ اﻟﺪاﻟﺔ ﻟﺘﻨﻔﯿﺬ اﻻواﻣﺮ اﻟﺘﻰ ﺑﺪاﺧﻠﻬﺎ ﺛﻢ اﻻﻧﺘﻘﺎل اﻟﻰ ﺗﻨﻔﯿﺬ اﻻواﻣﺮ اﻟﺘﻰ ﺗﻘﻊ
ﺧﺎرﺟﻬﺎ .
اﻟﺜﺎﻧﯿﺔ :
ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط وﺑﺎﻟﺘﺎﻟﻲ اﻻﻧﺘﻘﺎل اﻟﻰ ﺟﻤﻠﺔ ) ( elseوﺗﻨﻔﯿﺬ ﻣﺎﺑﺪاﺧﻠﻬﺎ ﺛﻢ اﻻﻧﺘﻘﺎل اﻟﻰ ﺗﻨﻔﯿﺬ اﻻواﻣﺮ اﻟﺘﻰ ﺗﻘﻊ
ﺧﺎرﺟﻬﺎ .
ﺻﯿﻐﺘﻬﺎ :
) اﻟﺸﺮط ( If
{
إذا ﺗﺤﻘﻖ ﻧﻔﺬ ﻣﺎﺑﺪاﺧﻠﻬﺎ
}
else
{
ﻧﻔﺬ ﻫﺬا اﻻﻣﺮ إذا ﻟﻢ ﯾﺘﺤﻘﻖ اﻟﺸﺮط
}
ﺗﻨﻔﯿﺬ اﻻواﻣﺮ اﻟﺨﺎرﺟﯿﺔ
٩
؟.. ﻟﻨﺄﺧﺬ ﻣﺜﺎﻻ ﻛﺎﻣﻼ وﻧﺮى ﻛﯿﻒ
: ﻣﺜﺎل
<html dir="rtl">
<head><title><اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ/title>
<script type ="text/javascript">
var pass_2="okman";
var pass_user;
pass_user = window.prompt(""ﻛﻠﻤﺔاﻟﺴﺮ،";)"ادﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ
if (pass_2 ==pass_user )
{
document.write (" ; ) " أﻫﻼ ﺑﻚ
}
else
{
document.write (" ; )" ﻛﻠﻤﺔ اﻟﺴﺮ ﻏﯿﺮ ﺻﺤﯿﺤﺔ
}
document.write (" ; )" ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ
</script>
</head>
<body></body>
</html>
١٠
ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ ) ( pass_2ووﺿﻌﻨﺎ ﺑﺪاﺧﻠﻪ ﻗﯿﻤﺔ ) ( okmanﺛﻢ ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ
) ( pass_userوﻟﻢ ﻧﻀﻊ ﺑﺪاﺧﻠﻪ ﻗﯿﻤﺔ ﻋﻠﻰ اﺳﺎس ان اﻟﻤﺴﺘﺨﺪم اي اﻟﺰاﺋﺮ ﻫﻮ اﻟﺬي ﺳﻮف ﯾﻀﻊ اﻟﻘﯿﻤﺔ وﻫﻨﺎ
ﺳﻮف ﺗﺨﺮج ﻧﺎﻓﺬة ﻟﺘﺨﺒﺮ اﻟﻤﺴﺘﺨﺪم ان ﯾﺪﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ وﻋﻨﺪﻫﺎ ﯾﻀﻊ اﻟﻤﺴﺘﺨﺪم اﻟﻜﻤﻠﻪ وﺑﺎﻟﺘﺎﻟﻲ ﺳﻮف ﺗﺨﺰن ﻫﺬه
اﻟﻘﯿﻤﺔ ﺑﺪاﺧﻞ اﻟﻤﺘﻐﯿﺮ ) ( pass_userوﺑﻌﺪ ذاﻟﻚ ﻧﺪﺧﻞ ﺑﺪاﺧﻞ ﺟﻤﻠﺔ اﻟﺸﺮط وﻫﻲ اﻟـ ) ( ifوﻫﻨﺎ ﺳﻮف ﯾﻘﺎرن
ﺑﯿﻦ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_2اﻟﻤﺨﺰﻧﻪ ﻣﺴﺒﻘﺎ وﺑﯿﻦ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_userاﻟﺬي ﺣﺪد ﻗﯿﻤﺘﻪ
اﻟﻤﺴﺘﺨﺪم اذا ﺟﻤﻠﺔ ) ) ( if ( pass_2==pass_userﺗﻌﻨﻲ ﻫﻞ اﻟﻤﺘﻐﯿﺮ ) ( pass_2اﻟﻤﺨﺰن ﻣﺴﺒﻘﺎ
ﺗﺴﺎوي ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ) ( pass_userاﻟﻤﺪﺧﻞ ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم ..ﻫﻨﺎ اذا ﻛﺎﻧﺖ اﻻﺟﺎﺑﻪ ﻧﻌﻢ ﻋﻨﺪﻫﺎ ﺳﻮف
ﯾﻄﺒﻊ ﻟﻪ ﺟﻤﻠﺔ أﻫﻼ ﺑﻚ واذا ﻛﺎﻧﺖ ﻻ اي ﻏﯿﺮ ﻣﺘﺴﺎوﯾﻦ اي ان ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺬي ادﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻟﯿﺲ ﻣﻄﺎﺑﻘﺔ
ﻟﻜﻠﻤﺔ اﻟﺴﺮ اﻟﻤﺨﺰﻧﻪ ﻣﺴﺒﻘﺎ ...ﻋﻨﺪﻫﺎ ﺳﻮف ﯾﻄﺒﻊ اﻟﺠﻤﻠﻪ اﻟﺘﻲ ﻓﻲ ) ( elseوﻫﻲ ﻛﻠﻤﺔ اﻟﺴﺮ ﻏﯿﺮ ﺻﺤﯿﺤﻪ..
وﺑﻌﺪ ان ﯾﻄﺎﺑﻖ وﯾﺮى اذا ﻛﺎﻧﺖ ﺻﺤﯿﺢ ام ﻻ ﻟﯿﺤﺪد اي ﺟﻤﻠﺔ ﯾﻄﺒﻊ ﺳﻮف ﯾﺨﺮج ﻣﻦ داﻟﺔ اﻟـ ) ( ifاﻟﻰ ﺗﻨﻔﯿﺬ
اﻟﺠﻤﻠﺔ اﻟﺨﺎرﺟﯿﺔ اي اﻟﺘﻲ ﺧﺎرج اﻟﺪاﻟﺔ واﻟﺘﻲ ﻟﯿﺲ ﻟﻬﺎ ﻋﻼﻗﺔ ﺑﻤﺎذا ﻛﺎﻧﺖ اﻟﻤﻄﺎﺑﻘﺔ ﻻ ام ﻧﻌﻢ وﺑﺘﺎﻟﻲ ﻃﺒﺎﻋﺔ ..ﻋﺎﻟﻢ
اﻟﺒﺮﻣﺠﺔ ..اذا ﻫﻨﺎ إﻣﺎ ان ﺗﻜﻮن اﻟﻜﻠﻤﺔ اﻟﻤﺪﺧﻠﻪ ﺻﺤﯿﺤﻪ وﻋﻨﺪﻫﺎ ﺳﻮف ﯾﻄﺒﻊ ﺟﻤﻠﺔ اﻫﻼ ﺑﻚ ﺛﻢ ﯾﻄﺒﻊ ﺟﻤﻠﺔ ﻋﺎﻟﻢ
اﻟﺒﺮﻣﺠﻪ او ان ﺗﻜﻮن اﻟﻜﻠﻤﺔ اﻟﻤﺪﺧﻠﻪ ﺧﻄﺄ وﻋﻨﺪﻫﺎ ﯾﻄﺒﻊ ﻛﻠﻤﺔ اﻟﺴﺮ ﻏﯿﺮ ﺻﺤﯿﺤﻪ ﺛﻢ ﯾﻄﺒﻊ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﻪ ..وﻓﻲ
ﻫﺬا اﻟﻤﺜﺎل اﻓﺘﺮﺿﻨﺎ اﻧﻪ ادﺧﻞ ﻛﻠﻤﺔ اﻟﺴﺮ ﺻﺢ " اﻗﺼﺪ ﻫﻨﺎ ﻓﻲ ﺻﻮرة اﻟﻤﺜﺎل "..
-١ﻗﺪ ﯾﺴﺘﺨﺪم اﻟﻤﺒﺮﻣﺞ ﺷﺮط ﺑﺪاﺧﻞ ﺷﺮط ﺑﺪاﺧﻞ ﺷﺮط وﺗﺴﻤﻰ ﻫﺬه اﻟﺤﺎﻟﺔ ) ( nested ifﻓﻼ ﯾﺰﻋﺠﻚ ذﻟﻚ
ﻓﻠﻜﻞ ﻣﻨﺎ أﺳﻠﻮﺑﻪ اﻟﺨﺎص ﻓﻲ وﺻﻒ اﻻﻣﻮر ﻛﻤﺎ أﻧﻪ ﻗﺪ ﯾﺘﺤﺘﻢ ﻋﻠﯿﻨﺎ أوﻗﺎت أن ﻧﺴﺘﺨﺪم ﺷﺮط ﺑﺪاﺧﻞ ﺷﺮط .
ﻣﺜﺎل :
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type ="text/javascript
;"var name1 ="sami
;"var name2 ="mahmoud
)"if (name1 =="sami
)"{ if (name2 =="mahmoud
; ) "أﻫﻼ ﺑﻚ"( document.write
}
; ) " ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ "( document.write
></script
></head
><body></body
></html
١١
ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل أﺿﻄﺮﻧﻨﺎ أن ﻧﺴﺘﺨﺪم ﺷﺮط ﺑﺪاﺧﻞ ﺷﺮط وﻫﺬا اﻷﺳﻠﻮب ﯾﺴﻤﻰ ) اﻷﺳﻠﻮب اﻟﻬﺮﻣﻲ اذا ﺟﺎز
اﻟﺘﻌﺒﯿﺮ ( ﻓﻬﻨﺎ وﺿﻌﻨﺎ ﺷﺮﻃﯿﻦ ﺑﺪاﺧﻞ ﺑﻌﺾ ...ﻟﻤﺎذا ؟
ﻟﻨﻔﺮض أن ﻟﺪﯾﻨﺎ ﻋﺪة أﺷﺨﺎص ﺟﻤﯿﻌﻬﻢ اﻹﺳﻢ اﻷول ﺳﺎﻣﻲ وﻟﻜﻦ إﺳﻢ اﻷب أي اﻹﺳﻢ اﻟﺜﺎﻧﻲ ﯾﺨﺘﻠﻒ إذا ﻫﻨﺎ ﯾﺠﺐ
أن ﻧﺘﺤﻘﻖ ﻣﻦ اﻹﺳﻤﯿﻦ اﻷول واﻟﺜﺎﻧﻲ إذا اﻟﺨﻄﻮات اﻟﺘﻰ ﻧﺘﺒﻌﻬﺎ ﻛﻤﺎ ﯾﻠﻲ :
ﻧﺤﻀﺮ ﺟﻤﯿﻊ اﻷﺷﺨﺎص اﻟﺬﯾﻦ إﺳﻤﻬﻢ اﻷول ) ﺳﺎﻣﻲ ( وﻫﺬا ﻣﺎﻓﻌﻠﻨﺎه ﺑﺎﻟﺸﺮط اﻷول .
ﻓﺈذا ﻛﺎن اﻟﺸﺮط ﻗﺪ ﺗﺤﻘﻖ أي أن أﺳﻢ اﻟﻤﺴﺘﺨﺪم ) ﺳﺎﻣﻲ ( ﺳﻮف ﯾﺪﺧﻞ اﻟﻰ اﻟﺪاﻟﺔ وﻣﻦ ﺛﻢ ﺳﻮف ﯾﺠﺪ ﺷﺮﻃﺎ آﺧﺮ
ﯾﺴﺄﻟﻪ ﻋﻦ أﺳﻤﻪ اﻟﺜﺎﻧﻲ أي أﺳﻢ اﻷب :
ﻓﺈذا ﺗﺤﻘﻖ ﺳﻮف ﯾﻨﻔﺬ اﻻﻣﺮ اﻟﺬي ﺑﺪاﺧﻞ ﻫﺬه اﻟﺪاﻟﺔ .وﻣﻦ ﺛﻢ ﯾﻨﻔﺬ اﻻواﻣﺮ اﻟﺘﻲ ﺧﺎرج اﻟﺪاﻟﺘﯿﻦ ﺗﻤﺎﻣﺎ .
ﻟﻮ ﻻﺣﻈﺖ أﻧﻪ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ أي ﻣﻦ اﻟﺸﺮﻃﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ﺳﻮف ﯾﺨﺮج ﻟﺘﻨﻔﯿﺬ ﻣﺎ ﺑﺨﺎرج اﻟﺪاﻟﺘﯿﻦ .
وﻗﺪ ﯾﺴﺘﺨﺪم ﺷﺨﺺ أﯾﻀﺎ داﻟﺔ ) ( ifداﺧﻞ داﻟﺔ ) ( ifداﺧﻞ داﻟﺔ ) ( ifوﻫﻜﺬا ﻓﻼ أرﯾﺪ أن أدﺧﻠﻚ ﻓﻲ §
ﻣﺘﺎﻫﺎت وﺧﻮارزﻣﯿﺎت ﻣﻌﻘﺪة .ﻓﻜﻤﺎ ﻗﻠﻨﺎ ﻟﻜﻼ ﻣﻨﺎ أﺳﻠﻮﺑﻪ ﻓﻘﺪ ﯾﻜﻮن ﺣﻞ ﻣﺴﺄﻟﺔ ﺑﺴﻄﺮ ﻓﯿﺄﺗﻲ ﺷﺨﺺ وﯾﺤﻠﻬﺎ
ﺑﺄرﺑﻌﺔ أﺳﻄﺮ ﺑﻄﺮﯾﻘﺔ ﻣﻌﻘﺪة ...إذا ﺟﻤﯿﻌﻨﺎ ﯾﺴﺘﻄﯿﻊ أن ﯾﺼﻞ اﻟﻰ اﻟﺤﻞ وﻟﻜﻦ ﺑﺄﺳﺎﻟﯿﺐ ﻣﺨﺘﻠﻔﺔ وﻗﺪ ﯾﺘﻄﻠﺐ
اﻻﻣﺮ ان ﻧﺴﺘﺨﺪم ﺟﻤﻞ ) ( ifﺑﺪاﺧﻞ ﺑﻌﻀﻬﺎ.
١٢
§ اﻟﺪاﻟﺔ اﻟﺸﺮﻃﯿﺔ ) : ( switch
ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻟﺪﯾﻨﺎ ﻋﺪة ﺧﯿﺎرات وﻧﻜﻮن ﻧﺮﯾﺪ أن ﻧﺨﺮج ﺑﻮاﺣﺪ ﻣﻨﻬﻢ وﻫﻮ اﻟﺬي ﻧﺮﯾﺪه أﻣﺎ ﻣﺎﻫﻮ اﻟﺬي ﻧﺮﯾﺪه ﻣﻦ ﺑﯿﻦ
اﻟﺨﯿﺎرات واﻟﺬي ﺳﻮف ﻧﺨﺮج ﺑﻪ ﺳﻮف ﯾﺤﺪده اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺳﻮف ﻧﺪﺧﻠﻪ واﻟﺬي ﺳﻮف ﯾﺘﻔﻖ ﻣﻊ واﺣﺪة ﻣﻦ ﻫﺬه
اﻟﺨﯿﺎرات وﯾﺤﻘﻘﻪ ..أي ﻫﻨﺎ وﻛﺄﻧﻨﺎ ﻧﺴﺘﺨﺪم اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﯿﺔ ) ( ifأو ﻣﺎﺷﺎﺑﻪ ذﻟﻚ اذا ﺟﺎز اﻟﻌﺒﯿﺮ..
وﯾﺄﺗﻲ أﺳﺘﺨﺪام اﻟﺪاﻟﺔ ) ( switchﻟﯿﺴﻬﻞ اﻟﻌﻤﻞ ﺑﺸﻜﻞ ﻛﺒﯿﺮ وﺳﻮف ﻧﺮى ذﻟﻚ :
ﺻﯿﻐﺘﻬﺎ :
ﻟﻨﺄﺧﺬ ﻣﺜﺎل وﻧﺤﻠﻠﻪ ..واﻟﺬي ﻣﻦ ﺧﻼﻟﻪ ﺳﻮف ﻧﻔﻬﻢ ﻣﺎﻗﺼﺪﻧﺎه ﻓﻲ ﻋﺒﺎراﺗﻨﺎ اﻟﺴﺎﺑﻘﻪ ..ﻓﺄﻧﺎ أﻋﺮف ﺟﯿﺪا ﻋﺰﯾﺰي
اﻟﻤﺘﺪرب أﻧﻪ ﻛﻼم ﻣﺒﻬﻢ وﻏﯿﺮ واﺿﺢ ﻟﻚ اﻟﻰ اﻻن.
ﻣﺜﺎل :
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; var country
{ ) switch ( country
default :
>document.writeln("<h3 ; )"> </h3اﻟﺪوﻟﺔ اﻟﺘﻲ أدﺧﻠﺘﻬﺎ ﻟﯿﺴﺖ ﻣﻦ ﺿﻤﻦ اﻟﺨﯿﺎرات اﻟﻤﺘﺎﺣﺔ
}
></script
></head
><body></body
></html
١٣
§ ﻓﻲ ﺣﺎﻟﺔ ادﺧﺎل داﻟﻪ ﻟﯿﺴﺖ ﺿﻤﻦ اﻟﺪول اﻟﻤﺬﻛﻮره ﻓﻲ ال) : ( case
١٤
ﻟﻨﺤﻠﻞ اﻟﻤﺜﺎل ﺳﻮﯾﺎ ﻓﺒﻪ ﻧﻌﺮف ﻣﺎﺑﻬﻢ ﻋﻠﯿﻨﺎ :
ﻓﻲ اﻟﺒﺪاﯾﺔ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( countryوأﺳﻨﺪﻧﺎه اﻟﻰ ﺟﻤﻠﺔ ) ( window.prompetﻟﻜﻲ ﯾﺪﺧﻠﻪ اﻟﻤﺴﺘﺨﺪم
ﺑﻨﻔﺴﻪ ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ أي اﻧﻪ ﺳﻮف ﯾﺪﺧﻞ أﺳﻢ دوﻟﺔ ﻣﻌﯿﻨﺔ ...وﻫﻨﺎ ﺳﻮف ﻧﺄﺗﻲ اﻟﻰ وﺿﻊ اﻟﻤﺘﻐﯿﺮ ﻓﻲ داﻟﺔ
) ( switchﻛﺎﻟﺘﺎﻟﻲ :
) switch ( country
ﺛﻢ ﻧﻀﻊ اﻟﺨﯿﺎرات اﻟﺘﻲ ﻧﺮﯾﺪﻫﺎ وﺳﻮف ﯾﻘﺎرن اﻟﻤﺘﻐﯿﺮ اﻟﺬي أدﺧﻠﻨﺎ ﻗﯿﻤﺘﻪ ﺑﻤﺎ ﻫﻮ ﻣﻮﺟﻮد ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ) ( case
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
" :اﻟﺴﻮدان " case
وﻓﻲ ﺣﺎﻟﺔ ﻣﻄﺎﺑﻘﺘﻪ ﻷي واﺣﺪة ﻣﻦ اﻟﺨﯿﺎرات اﻟﺘﻲ وﺿﻌﻨﺎﻫﺎ ﺳﻮف ﯾﻨﻔﺬ اﻟﺠﻤﻞ اﻟﺘﻲ ﺟﺎءت ﺿﻤﻦ ال ) ( case
اﻟﺬي ﺗﻮاﻓﻖ ﻣﻌﻪ وﺑﺎﻟﺘﺎﻟﻲ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ واﻟﺨﺮوج ﻣﻦ داﻟﺔ ) ( switchوﻟﻬﺬا ﻧﻀﻊ ﺑﻨﻬﺎﯾﺔ ﻛﻞ ) ( caseأﻣﺮ
) ( breakﻟﯿﺘﻮﻗﻒ ,ﻻﻧﻨﺎ ﻫﻨﺎ ﻧﺮﯾﺪ أن ﻧﺨﺮج ﺑﻘﯿﻤﺔ واﺣﺪة وﻫﻲ اﺣﺪى اﻟﺨﯿﺎرات اﻟﺘﻲ وﺿﻌﻨﺎﻫﺎ " ﺟﺮب أن ﻻ
ﺗﻀﻊ ) ( breakوأﻧﻈﺮ ﻣﺎذا ﺳﯿﺤﺪث ﻓﺒﺎﻟﺘﺠﺮﺑﺔ ﯾﺤﺪد اﻟﻤﻔﻬﻮم " .
وﻻﺣﻆ أﻧﻨﺎ وﺿﻌﻨﺎ ﻓﻲ اﻟﻨﻬﺎﯾﺔ اﻟﺪاﻟﺔ وﻗﺒﻞ اﻏﻼﻗﻬﺎ ) ( defaultوﻫﻨﺎ ﻧﻌﻨﻲ أﻧﻪ ﻓﻲ ﺣﺎﻟﺔ أن اﻟﻤﺴﺘﺨﺪم أدﺧﻞ
ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ وﻛﺎﻧﺖ ﻟﯿﺴﺖ ﺿﻤﻦ اﻟـ ) ( caseﺳﻮف ﯾﺨﺮج اﻟﻤﺴﺘﺨﺪم ﺑﺎﻟﺠﻤﻠﺔ واﻻﻣﺮ اﻟﺬي ﺳﻮف ﻧﻀﻌﻪ ﺑﻌﺪ
) ( defaultﺛﻢ ﻧﻨﻬﻲ اﻟﺪاﻟﺔ ﺑﻮﺿﻊ اﻟﻨﻬﺎﯾﺔ ) { ( ﻓﻤﺎ رأﯾﻚ ﻋﺰﯾﺰي اﻟﻤﺘﺪرب أن ﻧﺄﺧﺬ اﻟﻤﺜﺎل وﻛﺄﻧﻨﺎ ﻣﺴﺘﺨﺪﻣﻮن
وﻧﻨﻔﺬه اﻻن ﻋﻠﻰ ﻏﯿﺮ ﻣﺎ ﺗﻢ ادﺧﺎﻟﻪ ﻓﻲ اﻟﺼﻮر اﻟﺴﺎﺑﻘﺔ ﻣﻦ دوﻟﺔ ﻓﻠﺴﻄﯿﻦ .
ﻧﻔﺮض ﺧﺮﺟﺖ ﻧﺎﻓﺬة ) ( promptوأدﺧﻠﻨﺎ اﻟﺪوﻟﺔ اﻟﻌﺮاق ﻣﺜﻼ ﻓﻬﻨﺎ ﺳﻮف ﯾﺄﺗﻲ اﻟﺒﺮﻧﺎﻣﺞ وﯾﺄﺧﺬ ﻛﻠﻤﺔ اﻟﻌﺮاق
واﻟﺘﻲ ﻫﻲ اﺳﻨﺪت اﻟﻰ اﻟﻤﺘﻐﯿﺮ وﯾﻀﻌﻬﺎ ﻓﻲ داﻟﺔ ) ( switch
) switch ( country
ﻓﯿﺠﺪ أن ﻛﻠﻤﺔ اﻟﻌﺮاق ﻻﺗﺘﻄﺎﺑﻖ ﻛﻠﻤﺔ ﻓﻠﺴﻄﯿﻦ إذا ﻟﯿﺲ ﻫﺬا ﻫﻮ اﻟﺨﯿﺎر .ﻓﯿﻨﺘﻘﻞ اﻟﻰ اﻟـ ) ( caseاﻵﺧﺮ ...
١٥
ﻓﯿﺠﺪ أن اﻟﻤﺘﻐﯿﺮ ﺑﻪ ﻛﻠﻤﺔ اﻟﻌﺮاق ﯾﻄﺎﺑﻖ ﻫﺬا اﻟـ ) ( caseأي ) اﻟﻌﺮاق = اﻟﻌﺮاق ( ﻓﯿﻨﻔﺬ اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﺑﺪاﺧﻞ
ﻫﺬا اﻟـ ) ( caseاﻟﺘﻲ ﻫﻲ :
; )" > </h3ﻋﺎﺻﻤﺘﻬﺎ ﺑﻐﺪاد >document.writeLn( "<h3
وﺑﻌﺪ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ ﻫﺬه ﯾﺄﺗﻲ أﻣﺮ ) ( breakأي ﺗﻮﻗﻒ وﺑﺎﻟﺘﺎﻟﻲ اﻟﺨﺮوج ﻣﻦ داﻟﺔ ) ( switchﻛﺎﻣﻠﺘﺎ دون
اﻟﻤﺮور ﺑﺎﻟـ ) ( caseاﻟﺘﻲ ﺗﺄﺗﻲ ﺑﻌﺪﻫﺎ .
-وأﯾﻀﺎ ﻟﻮ ﻓﺮﺿﻨﺎ أن ﺷﺨﺺ أدﺧﻞ أي دوﻟﺔ ﻏﯿﺮ ﻣﻮﺟﻮدة ﺿﻤﻦ اﻟﺨﯿﺎرات ﻟﺘﻜﻦ اﻻردن أو اﻟﺴﻌﻮدﯾﺔ أو
اﻟﻜﻮﯾﺖ أو اﻻﻣﺎرات ...اﻟﺦ ﺳﻮف ﯾﻄﺒﻊ ﻫﻨﺎ اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﺿﻤﻦ اﻻﻣﺮ ) ( defaultأي :
; )" > </h3اﻟﺪوﻟﺔ اﻟﺘﻲ أدﺧﻠﺘﻬﺎ ﻟﯿﺴﺖ ﻣﻦ ﺿﻤﻦ اﻟﺨﯿﺎرات اﻟﻤﺘﺎﺣﺔ >document.writeln( "<h3
§ اﻟﺬي أرﯾﺪ ان أوﺻﻠﻪ ﻟﻚ ﻓﻲ اﻟﻨﻬﺎﯾﺔ ﻫﻮ ﺷﺊ واﺣﺪ وﻫﻲ أﻧﻨﺎ ﻧﺪﺧﻞ اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﺟﻤﻠﺔ ) ( switchﻟﻠﻤﻘﺎرﻧﺔ
ﻣﻊ اﻟﺨﯿﺎرات اﻟﻤﻮﺟﻮدة ﺑﺪاﺧﻠﻬﺎ وﻋﻨﺪ ﻣﻄﺎﺑﻘﺔ اﻟﻤﺘﻐﯿﺮ ﻣﻊ اﺣﺪى اﻟﺨﯿﺎرات أي اﻟﻨﺘﯿﺠﺔ ) ( trueﺳﻮف ﯾﻨﻔﺬ
اﻟﺠﻤﻠﺔ اﻟﻤﺘﻌﻠﻘﺔ ﺑﻬﺬه اﻟﻤﻄﺎﺑﻘﺔ ﻣﻊ اﻟﻌﻠﻢ أن واﺣﺪة ﻓﻘﻂ ﻣﻦ ﻫﺬه اﻟﺨﯿﺎرات ﺗﻌﻄﻲ ) ( trueواﻟﺒﺎﻗﯿﺔ ) ( false
وﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻛﻞ اﻟﺨﯿﺎرات ﻟﯿﺴﺖ ﻣﻄﺎﺑﻘﻪ ﺳﻮف ﯾﻨﻔﺬ ﻣﺎ ﺑﺪاﺧﻞ ) ( defaultاي ان ﺟﻤﯿﻊ ال ) ( caseﻏﯿﺮ
ﻣﻄﺎﺑﻘﺔ ) ..( falseاذا ﯾﺎﺗﻲ ﻋﻤﻞ ال ) .( default
١٦
§ ﺣﻠﻘﺎت اﻟﺘﻜﺮار :
وﻧﻌﻨ ﻲ ﺑﻬ ﺎ ﺗﻜ ﺮار ﺟﻤﻠ ﺔ ﻣﻌﯿ ﻨﺔ ﻋ ﺪة ﻣ ﺮات ﻓﺤﻠﻘ ﺔ اﻟﺘﻜ ﺮار ﺳ ﻮف ﺗﺴ ﺘﻤﺮ ﻣ ﺎدام اﻟﺸ ﺮط ﻣ ﺘﺤﻘﻘﺎ وﯾ ﺘﻢ اﻟ ﺘﺤﻘﻖ ﻣ ﻦ
اﻟﺸﺮط ﻓﻲ ﺑﺪاﯾﺔ اﻟﺤﻠﻘﺔ او ﻧﻬﺎﯾﺘﻬﺎ .
ﺻﯿﻐﺘﻬﺎ :
) ﻣﻘﺪار اﻟﺰﯾﺎدة ; ﺷﺮط اﻟﺤﻠﻘﺔ ; ﺑﺪاﯾﺔ اﻟﺤﻠﻘﺔ ( for
{
ﻧﻔﺬ اﻻﻣﺮ
}
ﻣﺜﺎل :
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
ﻣﻼﺣﻈ ﺔ :اﻧ ﺎ ﻋ ﺮﻓﺖ اﻟﻤﺘﻐﯿ ﺮ iﻓ ﻲ داﺧ ﻞ ﺣﻠﻘ ﺔ اﻟﺘﻜ ﺮار ﺗﺴ ﺘﻄﯿﻊ ﺗﻌ ﺮﯾﻔﻪ ﻓﻲ اﻟﺨﺎرج ﻛﻤﺎ ﻓﻲ اﻟﺴﺎﺑﻖ ووﺿﻌﻪ
ﻣﺒﺎﺷﺮة ...
١٧
ﻟﻨﺤﻠﻞ ﻫﺬا اﻟﻤﺜﺎل ﺳﻮﯾﺎ :
ﻫﻨﺎ أول ﺷﻲ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ وﻫﻮ ) (iوﺟﻌﻠﻨﺎ ﻗﯿﻤﺘﻪ اﻷﺑﺘﺪاﺋﯿﺔ
) (i=0أي أﻧﻪ ﺳﻮف ﯾﺒﺪأ ﻣﻦ ). (0
ﺛ ﻢ ﺣ ﺪدﻧﺎ اﻟﺸ ﺮط واﻟ ﺬي ﻫ ﻮ ) ( i < = 10أي أﻧ ﻨﺎ ﺳ ﻮف ﻧ ﺪﺧﻞ اﻟ ﻰ داﺧ ﻞ اﻟﺤﻠﻘ ﺔ وﻧ ﻨﻔﺬ ﻣﺎﺑ ﺪاﺧﻠﻬﺎ ﻣ ﻦ أواﻣ ﺮ
ﻣﺎداﻣﺖ ﻗﯿﻤﺔ ) ( iأﻗﻞ أو ﺗﺴﺎوي ) ( 10أي أﻧﻬﺎ ﻟﻮ وﺻﻠﺖ اﻟﻰ ) ( 11ﺳﻮف ﯾﺨﺮج ﻣﻦ اﻟﺤﻠﻘﺔ وﻟﻦ ﯾﺪﺧﻠﻬﺎ إذا
ﻫ ﻨﺎ ﺣ ﺪدﻧﺎ ﻧﻬﺎﯾﺔ ) ( iوﻫﻲ ) . ( 10أي أن اﻟﺘﻜﺮار ﺳﻮف ﯾﻜﻮن ١٠ﻣﺮات وﻻﻧﻨﺎ ﺑﺪأﻧﺎ ﻣﻦ اﻟﺼﻔﺮ ﺳﻮف ﯾﻜﻮن
. ١١
ﺛﻢ ﺣﺪدﻧﺎ ﻣﻘﺪار زﯾﺎدة اﻟﻤﺘﻐﯿﺮ ) ( iوﺣﺪدﻧﺎه ﺑﺄن ﯾﺰﯾﺪ ﺑـ ) ( 1ﺑﻜﻞ ﻣﺮة ﯾﺪﺧﻞ ﻓﯿﻬﺎ اﻟﻰ اﻟﺤﻠﻘﺔ .
* ﻧﺄﺗﻲ ﻟﻠﺘﻄﺒﯿﻖ اﻟﻌﻤﻠﻲ ﻟﻠﻤﺜﺎل " أي ﻣﺎﯾﺤﺪث ﺑﺪاﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ " :
ﻟﻨﻜﺘﺐ اﻟﺼﯿﻐﺔ وﻧﺘﺘﺒﻌﻬﺎ :
١٨
ﺳ ﻮف ﯾﺠﻌ ﻞ ﻗﯿﻤﺔ اﻟـ ) ( iاﻷﺑﺘﺪاﺋﯿﺔ ) ( 11ﺛﻢ ﯾﻨﺘﻘﻞ اﻟﻰ اﻟﺨـﻄﻮة اﻟﺘﻰ ﺗﻠﯿﻬﺎ ﺑﺎﻟــ ) ( forوﻫﻲ اﻟﺸﺮط §
) ( i < = 10ﺳ ﻮف ﯾﺴ ﺄل ﻫ ﻞ ﻗ ﯿﻤﺔ ) ( iواﻟﺘ ﻰ ﻫ ﻲ اﻻن ) ( 11أﻗ ﻞ أو ﺗﺴ ﺎوي ) ( 10ﺳ ﻮف ﺗﻜ ﻮن
اﻻﺟﺎﺑﺔ ﻻ إذا ﺳﻮف ﯾﺨﺮج ﻣﻦ اﻟﺤﻠﻘﺔ وﻟﻦ ﯾﻨﻔﺬ اﻟﺠﻤﻠﺔ اﻟﺘﻰ ﺑﺪاﺧﻠﻬﺎ .
ﻣﺜﺎل :
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
) for (var i = 1 ; i <=10; i ++
{
; ) document.write ( i
}
;)"اﻻﻋﺪاد >document.write (" <br /
></script
></head
><body></body
></html
١٩
i =1 à i ++ à i =2
i =2 à i ++ à i =3
i =3 à i ++ à i =4
i =4 à i ++ à i =5
i =5 à i ++ à i =6
i =6 à i ++ à i =7
i =7 à i ++ à i =8
i =8 à i ++ à i =9
i =9 à i ++ à i =10
ﺳﻮف ﯾﺘﻮﻗﻒ
ﻓ ﻨﺤﻦ ﻣﺤ ﺪدﯾﻦ أﻧ ﻪ آﺧ ﺮ ﻗ ﯿﻤﺔ ﺗﻄ ﺒﻊ ﻫ ﻲ ) ( 10ﻓ ﺒﻌﺪ أن ﯾ ﺰﯾﺪ ﻗﯿﻤﺔ ) ( iﺳﻮف ﯾﻔﺸﻞ اﻟﺸﺮط وﺑﺎﻟﺘﺎﻟﻲ ﺳﻮف
ﯾﺨ ﺮج ﻣ ﻦ ﺣﻠﻘ ﺔ اﻟﺘﻜﺮار ﻻن ﻗﯿﻤﺔ ) ( iاﺻﺒﺤﺖ ) ( 11اذا ﻫﻲ ﻟﯿﺴﺖ اﻗﻞ ﻣﻦ ) ( 10ﺛﻢ ﯾﻨﺘﻘﻞ اﻟﻰ اﻟﺠﻤﻠﺔ
اﻟﺘﻰ ﺗﻠﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار واﻟﺘﻰ ﻫﻲ ﺧﺎرج ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﻫﻲ ﻃﺒﺎﻋﺔ " اﻷﻋﺪاد "
12345678910
اﻻﻋﺪاد
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
)for (var i =10 ; i>=0 ; i--
{
; ) document.write( i
}
)"اﻷرﻗﺎم ﺑﺸﻜﻞ ﺗﻨﺎزﻟﻲ >document.write ( " <br /
></script
></head
><body></body
></html
٢٠
اﻟﻨﺘﯿﺠﺔ :
10987654321
اﻷرﻗﺎم ﺑﺸﻜﻞ ﺗﻨﺎزﻟﻲ
ﺻﯿﻐﺘﻬﺎ :
ﻗﺒﻞ اﻟﺨﻮض ﺑﻤﺜﺎل ﯾﺠﺐ أن ﺗﺤﺘﻮي ﺟﻤﻠﺔ اﻟـ ) ( whileﻋﻠﻰ ﻣﺎﯾﻠﻲ :
-١ﻣﺘﻐﯿﺮ ﻧﻀﻌﻪ ﺑﺎﻟﺸﺮط ﻟﻜﻲ ﻧﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ اﻟﺸﺮط .
-٢ﯾﺠﺐ وﺿﻊ ﻗﯿﻤﺔ إﺑﺘﺪاﺋﯿﺔ ﻟﻬﺬا اﻟﻤﺘﻐﯿﺮ ﻗﺒﻞ ﺟﻤﻠﺔ اﻟـ ) . ( while
-٣ﯾﺠ ﺐ أن ﻧﺬﻛ ﺮ ﻫ ﺬا اﻟﻤﺘﻐﯿ ﺮ وﻣﻘ ﺪار زﯾﺎدﺗﻪ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺸﺮط ﺳﻮاءا ﻗﺒﻞ ﺗﻨﻔﯿﺬ اﻟﺠﻤﻠﺔ اﻟﺘﻰ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ
اﻟﺘﻜﺮار أو ﺑﻌﺪﻫﺎ .
٢١
ﻣﺜﺎل :
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; var i = 1
) while (i <= 10
{
; ) document.write ( i
; i ++
}
></script
></head
><body></body
></html
ﻓﺪﺧﻠﻨﺎ ﺑﺪاﺧﻠﻬﺎ وﻧﻔﺬﻧﺎ اﻟﺠﻤﻠﺔ اﻟﺘﻰ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺘﻰ ﻫﻲ ﻃﺒﺎﻋﺔ ﻗﯿﻤﺔ ) ( iواﻟﺘﻰ ﻫﻲ ) . ( 1
; ) document.write ( i
ﺛ ﻢ أﻧﺘﻘﻠ ﻨﺎ اﻟ ﻰ اﻟﺠﻤﻠ ﺔ اﻟﺘ ﻰ ﺗﻠ ﯿﻬﺎ واﻟﺘ ﻰ ﻫ ﻲ ) ( i++وﺗﻌﻨ ﻲ زﯾ ﺪ ﻗ ﯿﻤﺔ ) ( iﺑﻤﻘ ﺪار ) ( 1ﻓﺄﺻﺒﺤﺖ ﻗﯿﻤﺔ ) ( i
ﺗﺴﺎوي ) .( 2
٢٢
ﺗﻢ ﻋﺎد ﻣﺮة أﺧﺮى اﻟﻰ ) ( whileﻓﺴﺄﻟﻪ اﻟﺸﺮط ﻫﻞ ﻗﯿﻤﺔ ) ( iأﻗﻞ أو ﺗﺴﺎوي ) ( 10ﻓﻜﺎﻧﺖ اﻻﺟﺎﺑﺔ ﺑﻨﻌﻢ ﻓﻨﺤﻦ
ﻋﺪﻧﺎ ﻟﻠـ ) ( whileﺑﻘﯿﻤﺔ ) ( iﺑﻌﺪ زﯾﺎدﺗﻬﺎ ﺑـ ) ( 1أي ) . ( 2
ﻓﺒﻌﺪ ﺗﺤﻘﻖ اﻟﺸﺮط دﺧﻠﻨﺎ اﻟﻰ داﺧﻞ اﻟﺤﻠﻘﺔ ﻓﻮﺟﺪﻧﺎ أﻣﺮ اﻟﻄﺒﺎﻋﺔ ﻗﯿﻤﺔ ) ( iوﻫﻮ ) . ( 2
ﺛ ﻢ أﻧﺘﻘﻠ ﻨﺎ اﻟ ﻰ اﻟﺠﻤـﻠ ﺔ اﻟﺘ ﻰ ﺗﻠﯿﻬﺎ واﻟﺘﻰ ﻫﻲ ) " ( i++أي زﯾـﺪ ﻗﯿﻤـﺔ ) ( iﺑﻤﻘـﺪار ) ( 1وﻗﯿﻤﺔ ) ( iﻋﻨﺪﻧﺎ اﻻن
) ( 2زﯾﺪﻫﺎ ﺑﻮاﺣﺪ ﻟﺘﺼﺒﺢ ) . " ( 3
ﺛ ﻢ ﻧﻌ ﻮد اﻟ ﻰ اﻟ ـ ) ( whileﻣﺮة أﺧﺮى وﻣﻌﻨﺎ ﻗﯿﻤﺔ اﻟـ ) ( iاﻟﺠﺪﯾﺪة وﻫﻲ ) ( 3وﯾﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط ﻣﺮة أﺧﺮى
وﻫﻜﺬا ﻧﺴﺘﻤﺮ 10ﻣﺮات اﻟﻰ أن ﺗﺼﻞ ﻗﯿﻤﺔ ) ( iاﻟﻰ ) ( 11وﻫﻨﺎ ﺳﻮف ﯾﺤﺪث اﻟﺘﺎﻟﻲ :
ﯾﺄﺗ ﻲ اﻟﺠﻤﻠﺔ اﻟـ ) ( whileﻓﺴﺄﻟﻪ اﻟﺸﺮط ﻫﻞ ﻗﯿﻤﺔ ) ( iاﻟﺘﻰ ﻫﻲ ) ( 11أﻗﻞ أو ﺗﺴﺎوي ) ( 10ﻓﯿﻜﻮن اﻟﺠﻮاب
ﻻ ﻓﯿﺨ ﺮج ﻣ ﻦ ﺣﻠﻘ ﺔ اﻟﺘﻜﺮار وﻻﯾﺪﺧﻞ ﺑﺪاﺧﻠﻬﺎ .وإذا ﻛﺎن ﻫﻨﺎك ﺟﻤﻠﺔ ﺗﻠﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺳﻮف ﯾﻨﻔﺬﻫﺎ ﺑﻌﺪ ﺧﺮوﺟﻪ
ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار .
) ﻻﺣﻆ ﺟﻤﻠﺔ ﺗﻠﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﻟﯿﺲ ﺑﺪاﺧﻠﻪ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ( .
ﻣﺜﺎل اﺧﺮ ) ﻟﻨﺠﻌﻠﻚ ﺗﻘﺎرن ﺑﯿﻦ ) ( whileو ) . . ( ( for
ﻣﺜﺎل ) : ( 1
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; var i = 10
) while (i>= 1
{
; ) document.write ( i
; i --
}
></script
></head
><body></body
></html
٢٣
ﺣﻠﻘﺔ اﻟﺘﻜﺮار ) : ( Do while §
وﻓ ﻲ ﻫ ﺬه اﻟﻄ ﺮﯾﻘﺔ ﺳﻮف ﯾﺴﺘﻤﺮ ﺑﺘﻨﻔﯿﺬ ﻣﺎﺑﺪاﺧﻞ اﻟﺤﻠﻘﺔ ﻣﺎدام اﻟﺸﺮط ﻣﺘﺤﻘﻖ وﻫﻨﺎ ﺳﻮف ﯾﺪﺧﻞ اﻟﻰ داﺧﻞ اﻟﺤﻠﻘﺔ
وﻣ ﻦ ﺛ ﻢ ﯾ ﻨﻔﺬ اﻻﻣ ﺮ اﻟ ﺬي ﺑﺪاﺧﻠﻬﺎ وﺑﻌﺪ ﺗﻨﻔﯿﺬﻫﺎ ﯾﻨﺘﻘﻞ ﻟﯿﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط ﻓﺈذا ﺗﺤﻘﻖ ﯾﻌﻮد ﻣﺮة آﺧﺮى اﻟﻰ اﻟﺤﻠﻘﺔ
وﯾﻨﻔﺬ اﻻﻣﺮ ﻣﺮة أﺧﺮى وإذا ﻟﻢ ﯾﺘﺤﻘﻖ ﯾﺨﺮج ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﻟﻦ ﯾﻌﻮد ﻟﻬﺎ .
ﺻﺒﻐﺘﻬﺎ :
{ do
ﻧﻔﺬ اﻻﻣﺮ
ﻣﻘﺪار اﻟﺰﯾﺎدة
}
) ﻋﺪ اﻟﻰ داﺧﻞ اﻟﺤﻠﻘﺔ ﻣﺮة أﺧﺮى وﻧﻔﺬ ﻣﺎدام اﻟﺸﺮط ﯾﺘﺤﻘﻖ ( while
ﻣﺜﺎل :
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; var i = 1
{ do
; ) document.write( i
; i ++
}
) while ( i <= 10
></script
></head
><body></body
></html
٢٤
ﻟﻨﺤﻠﻞ ﻫﺬا اﻟﻤﺜﺎل ﺳﻮﯾﺎ :
وﺿ ﻌﻨﺎ ﻗ ﯿﻤﺔ إﺑﺘﺪاﺋ ﯿﺔ ﻟﻠ ـ ) ( iوﻫ ﻲ ) ( 1ﺛ ﻢ دﺧﻠ ﻨﺎ اﻟ ﻰ داﺧﻞ ) ( do whileﺛﻢ ﺗﻮﺟﻬﻨﺎ اﻟﻰ اﻟﺠﻤﻠﺔ اﻟﺘﻰ ﺗﻠﯿﻬﺎ
ﻫ ﻲ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ " أي ﻃﺒﺎﻋﺔ ﻗﯿﻤﺔ ) " ( iإذا ﺳﻮف ﯾﻄﺒﻊ ) (١ﺛﻢ وﺟﺪﻧﺎ اﻻﻣﺮ ) ( i++اي زﯾﺎدة ﻗﯿﻤﺔ ) ( i
أي أﺻ ﺒﺤﺖ ﻗ ﯿﻤﺔ ) ( iﺗﺴﺎوي ) .( 2ﺛﻢ اﻧﺘﻘﻠﻨﺎ اﻟﻰ ﺟﻤﻠﺔ اﻟﺸﺮط اﻟﺘﻲ ﺣﺪد ﻫﻞ ﺳﻮف ﻧﻌﻮد اﻟﻰ ) ( doأم ﻻ .
ﻓ ﻮﺟﺪﻧﺎ اﻟﺸ ﺮط ﯾﺴ ﺄﻟﻨﺎ ﻫ ﻞ ﻗ ﯿﻤﺔ ) ( iأي ) ( 2أﻗ ﻞ أو ﺗﺴ ﺎوي ) ( 10ﻓﻜ ﺎن اﻟﺠ ﻮاب ﻧﻌ ﻢ إذا ﻋ ﺪﻧﺎ ﻟﻠ ـ ) ( do
ﻣ ﺮة أﺧ ﺮى ﺛ ﻢ ﻧﻔ ﺬﻧﺎ ﻣﺎﺑ ﺪاﺧﻠﻬﺎ ﻓ ﺰدﻧﺎ ﻗ ﯿﻤﺔ ) ( iﺑ ﻮاﺣﺪ ﻓﺄﺻ ﺒﺤﺖ ) ( 3ﺛ ﻢ اﻧﺘﻘﻠ ﻨﺎ اﻟ ﻰ اﻟﺸ ﺮط وﻗ ﺪ ﻧﺤﻘﻖ وﻛﺎﻧﺖ
اﻻﺟﺎﺑ ﺔ ﺑ ﻨﻌﻢ أي أن اﻟ ـ ) ( 3أﻗ ﻞ ﻣ ﻦ ) ( 10وﻫﻜ ﺬا اﺳ ﺘﻤﺮﯾﻨﺎ اﻟ ﻰ أن ﻧﺼ ﻞ ﻟﻘ ﯿﻤﺔ اﻟ ـ ) ( iﯾﺴ ﺎوي ) ( 11
وﺑﺎﻟﺘﺎﻟﻲ ﻋﺪم اﻟﻌﻮدة اﻟﻰ ) ( doواﻟﺨﺮوج ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار .
ﻛﻤ ﺎ ﻓ ﻲ ) ( whileﻧ ﺘﺤﻘﻖ ﻣ ﻦ اﻟﺸ ﺮط ﻗ ﺒﻞ اﻟﺪﺧ ﻮل اﻟ ﻰ اﻟﺤﻠﻘ ﺔ أي أﻧ ﻨﺎ ﻻﻧ ﻨﻔﺬ أي ﺷ ﺊ ﺑﺪاﺧﻠﻬﺎ ﻣﺎدام اﻟﺸﺮط ﻟﻢ
ﯾﺘﺤﻘﻖ وﻫﺬا أﻣﺮ ﻃﺒﯿﻌﻲ ﻻﻧﻨﺎ ﻟﻢ ﻧﺪﺧﻞ اﻟﻰ اﻟﺤﻠﻘﺔ أﺻﻼ ﻓﻜﯿﻒ ﻧﻌﺮف ﻣﺎﺑﺪاﺧﻠﻬﺎ وﻧﻨﻔﺬه .
أﻣ ﺎ ﺑﺎﻟـ ) ( do whileﻛﻨﺎ ﻧﺪﺧﻞ اﻟﻰ اﻟﺤﻠﻘﺔ وﻧﻨﻔﺬ أﻣﺮ ﺛﻢ ﻧﻔﺤﺺ اﻟﺸﺮط وﻟﻜﻦ ﺑﻌﺪ أن ﻧﻜﻮن ﻗﺪ ﻧﻔﺬﻧﺎ ﻫﺬا اﻻﻣﺮ
وﯾﺠﺐ اﻟﺘﻨﺒﯿﻪ ﻫﻨﺎ " ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ﻟﻦ ﻧﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ ) . ( do
إذا اﻟﻔ ﺮق ﻫ ﻮ أن ﺑﺎﻟـ ) ( do whileﯾﻨﻔﺬ ﻋﻠﻰ اﻻﻗﻞ أﻣﺮ واﺣﺪ ﻓﻲ داﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺣﺘﻰ ﻟﻮ ﻛﺎن اﻟﺸﺮط ﻏﯿﺮ
ﻣﺘﺤﻘﻖ ﻋﻠﻰ اﻟﻌﻜﺲ اﻟـ ) ( whileاﻟﺬي ﻻﯾﻨﻔﺬ أي اﻣﺮ ﻣﺎدام اﻟﺸﺮط ﻏﯿﺮ ﻣﺘﺤﻘﻖ .
ﻓ ﻲ ﻣ ﺜﺎل اﻟ ـ ) ( whileاﻟﺒ ﺮﻧﺎﻣﺞ ﻟﻦ ﯾﻄﺒﻊ ﺷﯿﺌﺎ وذﻟﻚ ﻻﻧﻪ ﺳﺄﻟﺘﻪ ﺟﻤﻠﺔ اﻟﺸﺮط ﻗﺒﻞ اﻟﺪﺧﻮل ﻫﻞ اﻟـ ) ( 5أﻗﻞ
ﻣﻦ ) ( 3ﻓﻜﺎن اﻟﺠﻮاب ﻻ .وﻫﻨﺎ ﻟﻦ ﯾﺪﺧﻞ اﻟﻰ اﻟﺤﻠﻘﺔ وﺑﺎﻟﺘﺎﻟﻲ ﻋﺪم ﺗﻨﻔﯿﺬ ﻣﺎﺑﺪاﺧﻠﻬﺎ أي ﻋﺪم ﻃﺒﺎﻋﺔ ﻗﯿﻤﺔ ) ( i
ﻓ ﻲ ﻣ ﺜﺎل اﻟ ـ ) ( do whileﺳ ﻮف ﯾﻄﺒﻊ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻘـﻂ ﻣـﺮة واﺣـﺪة ﻗﯿﻤﺔ ) ( iﺛﻢ ﯾﺘﻮﻗﻒ ﻓﺒﻌﺪ ﻃﺒﺎﻋـﺔ ﻗﯿﻤﺔ
) ( iﺳ ﻮف ﯾﺴ ﺄل ﻋ ﻦ اﻟﺸ ﺮط وﻫﻮ ﻫﻞ ) ( 6أﺻﻐﺮ ﻣﻦ ) ( 3ﻓﺴﻮف ﺗﻜﻮن اﻻﺟﺎﺑﺔ ﻻ وﺑﺎﻟﺘﺎﻟﻲ ﻋﺪم اﻟﻌﻮدة
اﻟﻰ ﺟﻤﻠﺔ ) ( doأي ﻋﺪم اﻟﺪﺧﻮل اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار واﻻﺳﺘﻤﺮار ﺑﺎﻟﻄﺒﺎﻋﺔ أي اﻟﺨﺮوج .
ﻗ ﺪ ﺗﺘﺴ ﺎءل ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻣﺎﻟﻔﺎﺋﺪة ﻣﻦ أﺧﺬﻧﺎ اﻟـ ) ( whileواﻟـ ) ( do whileﻣﺎدام أﻧﻬﻤﺎ ﯾﻌﻤﻠﻮا ﻋﻤﻞ
اﻟـ ) ( for؟
ﻋﺰﯾ ﺰي اﻟﻤ ﺘﺪرب ﻧﺤ ﻦ ﻧﺬﻛ ﺮ ﻟ ﻚ ﻛ ﻞ ﺻ ﯿﻎ اﻟﺘﻜ ﺮار ﻓ ﻲ ﻟﻐ ﺔ اﻟﺠﺎﻓ ﺎ ﺳ ﻜﺮﺑﺖ " واﻟﻤﺴ ﺘﺨﺪﻣﺔ ﻓ ﻲ ﺟﻤﯿﻊ ﻟﻐﺎت
اﻟﺒ ﺮﻣﺠﻪ " وﻟ ﻚ ﺣﺮﯾﺔ اﻻﺧﺘﯿﺎر ﺑﺈﺳﺘﻌﻤﺎل أي واﺣﺪة ﻣﻨﻬﺎ ﻓﻘﺪ ﺗﺠﺪ أن ) ( for _ loopﻫﻲ أﻓﻀﻞ ﻟﻚ وﻟﻜﻦ
ﻋ ﻨﺪ ﻏﯿ ﺮك ﺗﺠ ﺪ اﻟ ـ ) ( whileأو ) ( do whileﻫ ﻲ أﻓﻀ ﻞ ﻟ ﻪ وﻗﺪ ﯾﺘﺤﺘﻢ ﻋﻠﯿﻚ إﺳﺘﺨﺪام أي واﺣﺪة ﻣﻨﻬﺎ
ﻣ ﺜﻞ ) ( do whileﻓ ﻲ ﻛ ﺘﺎﺑﺖ ﺑ ﺮﻧﺎﻣﺠﻚ ﻓﻬ ﺬا راﺟﻊ ﻟﻚ وﻣﺎ ﻣﻄﻠﺒﻚ ﻣﻦ ﺑﺮﻧﺎﻣﺠﻚ ﻓﻜﻤﺎ ﻗﻠﻨﺎ ﻟﻜﻼ ﻣﻨﺎ أﺳﻠﻮﺑﻪ
وﻃﺮﯾﻘﺘﻪ اﻟﺨﺎﺻﺔ ﯾﻜﺘﺎﺑﺔ اﻟﺒﺮﻧﺎﻣﺞ .
٢٥
اﻻﻣﺮ ) ( breakو ) : ( continue §
ﻟﻨﻔﺮض أن ﻟﺪﯾﻚ ﺑﯿﺎﻧﺎت ﻣﺨﺰﻧﺔ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وﻟﻜﻦ ﺗﺮﯾﺪ ﻓﻘﻂ ﺟﺰء ﻣﻦ ﻫﺬه اﻟﺒﯿﺎﻧﺎت أن ﺗﻌﺮض وﻟﯿﺲ ﺟﻤﯿﻌﺎ
ﻓﻬﻨﺎ أﺳﺘﺨﺪم ) ( breakﻟﻜﻲ أﺧﺮج ﻣﺒﺎﺷﺮة ﻣﻦ داﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺣﺘﻰ ﻟﻮ ﻟﻢ أﺗﻨﺘﻬﻲ ﻣﻦ اﻟﺤﻠﻘﺔ .
ﺻﯿﻐﺘﻬﺎ :
; break
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; )"ﻣﺤﻤﺪ" "،اﻟﻌﺮﺑﻲ" "،ﻟﺤﺴﻦ""،ﻋﺎﻃﻒ""،ﻣﺤﻤﻮد" "،ﺛﺎﻣﺮ""،ﺧﺎﻟﺪ"(var x = new Array
)for(var i=0 ; i <x.length ; i++
{
)if(i == 4
; break
; )">document.writeln(x[i] + "<br /
}
></script
></head
><body></body
></html
ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( xواﻟﺬي ﻫﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ ) ( 7أﺳﻤﺎء .ﺛﻢ اﻧﺸﺄﻧﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار )
( forوﺑﺪأﻧﺎﻫﺎ ﻣﻦ ) ( 0اﻟﻰ ) ( i < x.lenghأي أﻗﻞ ﻣﻦ اﻟﻌﺪد ) . ( 7
وﻋﺰﯾﺰي اﻟﻤﺴﺘﺨﺪم اﻻﻣﺮ اﻟﻄﺒﯿﻌﻲ واﻟﺒﺪﯾﻬﻲ أن ﯾﻄﺒﻊ ﺟﻤﯿﻊ اﻷﺳﻤﺎء اﻟﺘﻲ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ ﻟﻜﻦ ﻫﻨﺎ اﻟﺬي ﺳﻮف ﯾﺤﺪث
أﻧﻪ ﺳﻮف ﯾﻄﺒﻊ ﻓﻘﻂ أرﺑﻌﺔ أﺳﻤﺎء .وﯾﺨﺮج ﺧﺎرج ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻟﻤﺎذا ...
26
٢٦
ﻷﻧﻨﺎ وﺿﻌﻨﺎ ﺷﺮط داﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﻫﻮ ) ( if i == 4وﺑﻌﺪه وﺿﻌﻨﺎ ) ( breakأي أﻧﻨﺎ ﺣﺪدﻧﺎ إذا ﻛﺎﻧﺖ
ﻗﯿﻤﺔ ) ( iﻣﺴﺎوﯾﺔ ﻟﻠﻌﺪد ) ( 4ﯾﺘﻮﻗﻒ ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وأﯾﻀﺎ ﻻﯾﻨﻔﺬ أﻣﺮ ) ( document.writelnأي
ﯾﺨﺮج ﻋﻨﺪ وﺻﻮﻟﻪ ﻧﻘﻄﺔ ) ( breakوﯾﺨﺮج ﺣﺘﻰ ﻟﻮ ﻟﻢ ﺗﻨﺘﻬﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار .
إذا ﻫﻨﺎ ﻓﻘﻂ ﺳﻮف ﯾﻄﺒﻊ اﻷﺳﻤﺎء اﻷرﺑﻌﺔ اﻻواﺋﻞ واﻟﺘﻲ ﻫﻢ ) ﻣﺤﻤﺪ _ اﻟﻌﺮﺑﻲ _ ﻟﺤﺴﻦ _ ﻋﺎﻃﻒ ( وﻻ ﺗﻨﺴﻰ
اﻧﻨﺎ ﺑﺪأﻧﺎ ﻣﻦ اﻟﺼﻔﺮ.
اﻻﻣﺮ ) : ( continue
ﻫﺬا اﻻﻣﺮ ﻋﻤﻠﻪ ﻫﻮ اﻟﻘﻔﺰ ﻋﻦ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻧﺤﻦ ﻧﺤﺪدﻫﺎ أي ﯾﻌﻤﻞ ) ... ( skipﻟﻨﻔﺮض أن ﻟﺪﯾﻨﺎ ﻓﻲ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت ﻣﺜﻼ أو ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﺳﺒﻌﺔ أﺳﻤﺎء وﻟﻜﻦ اﻷﺳﻢ رﻗﻢ ) ( 4ﻻﻧﺮﯾﺪ ﻃﺒﺎﻋﺘﻪ ﻓﻘﻂ ﻫﻮ ...أﻣﺎ اﻟﺒﻘﯿﺔ ﻧﺮﯾﺪ
ﻃﺒﺎﻋﺘﻬﺎ إذا ﻫﻨﺎ اﻟﺬي ﺳﻮف ﯾﺤﻞ ﻟﻨﺎ ﻫﺬا اﻻﻣﺮ ﻫﻮ ) . ( continue
ﺻﯿﻐﺘﻬﺎ :
; continue
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; )"ﻣﺤﻤﺪ" "،اﻟﻌﺮﺑﻲ" "،ﻟﺤﺴﻦ""،ﻋﺎﻃﻒ""،ﻣﺤﻤﻮد" "،ﺛﺎﻣﺮ""،ﺧﺎﻟﺪ"(var x = new Array
)for(var i=0 ; i <x.length ; i++
{
)if(i == 4
;continue
; )">document.writeln(x[i] + "<br /
}
></script
></head
><body></body
></html
27
٢٧
ﻟﻨﺤﻠﻞ اﻟﻤﺜﺎل ﺳﻮﯾﺎ :
ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( xواﻟﺬي ﻫﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ ) ( 7أﺳﻤﺎء .ﺛﻢ اﻧﺸﺄﻧﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار )
( forوﺑﺪأﻧﺎﻫﺎ ﻣﻦ اﻟﻌﺪد ) ( 0اﻟﻰ ) ( i < x.lenghأي أﻗﻞ ﻣﻦ اﻟﻌﺪد ) . ( 7
وﻋﺰﯾﺰي اﻟﻤﺴﺘﺨﺪم اﻻﻣﺮ اﻟﻄﺒﯿﻌﻲ واﻟﺒﺪﯾﻬﻲ أن ﯾﻄﺒﻊ ﺟﻤﯿﻊ اﻷﺳﻤﺎء اﻟﺘﻲ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ ﻟﻜﻦ ﻫﻨﺎ اﻟﺬي ﺳﻮف ﯾﺤﺪث
أﻧﻪ ﺳﻮف ﯾﻄﺒﻊ ﺟﻤﯿﻊ اﻷﺳﻤﺎء ﻣﺎﻋﺪا أﺳﻢ ) ﻣﺤﻤﻮد ( .ﻟﻤﺎذا ؟
ﻧﺤﻦ ﻫﻨﺎ ﻛﺘﺒﻨﺎ ﺷﺮط واﻟﺬي وﻫﻮ ) ( if i == 4وﺑﻌﺪه ﻛﺘﺒﻨﺎ ) ( continueأي ﻛﺄﻧﻨﺎ ﻧﻘﻮل ﻫﻨﺎ ﻋﻨﺪﻣﺎ ﺗﺼﻞ
ﻗﯿﻤﺔ ) ( iﻟﻠﻌﺪد ) ( 4ﻧﻔﺬ ) ( continueأي اﻟﻤﻮﻗﻊ اﻟﺮاﺑﻊ ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ ...ﺗﺠﺎﻫﻠﻪ وﻻ ﺗﻄﺒﻌﻪ واﻧﺘﻘﻞ اﻟﻰ
اﻟﺬي ﯾﻠﯿﻪ اي ارﺟﻊ وﺗﺠﺎوز ﻋﻦ اﻣﺮ اﻟﻄﺒﺎﻋﺔ ...ﻓﻬﻨﺎ ﺳﻮف ﯾﻄﺒﻊ اﻷﺳﻤﺎء اﻻرﺑﻌﺔ اﻻوﻟﻰ واﻟﺘﻲ ﻫﻲ ) ﻣﺤﻤﺪ _
اﻟﻌﺮﺑﻲ _ ﻟﺤﺴﻦ _ ﻋﺎﻃﻒ( أي أﻧﻨﺎ وﺻﻠﻨﺎ اﻟﻰ اﻟﻤﻮﻗﻊ اﻟﺮاﺑﻊ ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ ﺗﺼﺒﺢ ﻗﯿﻤﺔ ) ( iﻫﻲ ) ( 4
اﻷﺳﻢ ) ﻣﺤﻤﻮد ( ﻓﯿﻨﻔﺬ اﻻﻣﺮ ) ( continueوﯾﻌﻤﻞ ) ( skipأي ﺗﺠﺎﻫﻞ وﻗﻔﺰ ﻋﻦ ﻫﺬا اﻷﺳﻢ ﺛﻢ ﯾﺴﺘﻤﺮ ﻓﻲ
ﻃﺒﺎﻋﺔ ﺑﻘﯿﺔ اﻷﺳﻤﺎء .
ﻣﻼﺣﻈﺔ :
او whileﺑﺪاﺧﻞ forاو whileاي ﻗﺪ ﯾﺘﻄﻠﺐ ﻣﻨﻚ ﺑﺮﻧﺎﻣﺞ ﻣﻌﯿﻦ ﺣﺴﺐ وﻇﯿﻔﺘﻪ اﻟﻰ وﺿﻊ for
nested loopﻛﻤﺎ ﻓﻲ ال ifﺗﺬﻛﺮ
28
٢٨
§ اﻟﺪوال ) : ( function
ﻫﻨﺎ ﺳﻮف ﻧﺘﺤﺪث ﻋﻦ ﻛﯿﻔﯿﺔ إﻧﺸﺎء داﻟﺔ أو أﻛﺜﺮ ﺧﺎﺻﺔ ﺑﻚ ﺑﺪاﺧﻞ ﺑﺮﻧﺎﻣﺠﻚ وﻟﻜﻦ ﻗﺪ ﺗﺘﺴﺎءل ﻣﺎﻫﻲ اﻟﺪوال ﺳﻮف
ﻧﺠﯿﺒﻚ ﺑﺎﻟﺘﺎﻟﻲ . .
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب اﻟﺪاﻟﺔ ﻫﻲ ﻣﻦ اﻻواﻣﺮ واﻟﻤﺘﻐﯿﺮات ﺗﻜﻮن ﯾﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺑﺤﯿﺚ ﻧﻀﻌﻬﺎ داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ وﻻ ﯾﻨﻔﺬﻫﺎ
اﻟﺒﺮﻧﺎﻣﺞ اﻻ ﻋﻨﺪﻣﺎ ﯾﺘﻢ أﺳﺘﺪﻋﺎﺋﻬﺎ وﻫﺬا ﻣﺎﯾﺼﻄﻠﺢ ﻋﻠﯿﻪ ﺑـ ) ( call functionأﻣﺎ ﻛﯿﻔﯿﺔ أﺳﺘﺪﻋﺎﺋﻬﺎ ﻓﯿﺘﻢ ﻋﻦ
ﻃﺮﯾﻖ ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﺪاﻟﺔ وأرﺳﺎل اﻟﻤﺘﻐﯿﺮات ﻟﻬﺎ " إن وﺟﺪت " .
ﺑﻌﺪ ﻣﺎذﻛﺮﻧﺎه ﻗﺪ ﺗﺘﺴﺎءل ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻟﻤﺎذا أﺳﺘﺨﺪم ﻫﺬه اﻟﺪوال وﻣﺎﻗﯿﻤﺘﻬﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻲ أي ﻣﺎﻫﻲ أﻫﻤﯿﺘﻬﺎ ﻧﺠﯿﺒﻚ
ﺑﻤﺎ ﯾﻠﻲ . . .
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﺗﺴﺘﻄﯿﻊ أن ﻻﺗﺴﺘﺨﺪم اﻟﺪوال وﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺠﻚ ﻛﺎﻟﻤﻌﺘﺎد وﻣﻦ ﻏﯿﺮ دوال وﻟﻜﻦ ﺗﻌﺮف ﻣﺎذا
ﺳﯿﺤﺪث . . .
ﻟﻨﻔﺮض أﻧﻚ ﺗﺮﯾﺪ أن ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم أن ﯾﺪﺧﻞ رﻗﻤﯿﻦ واﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺻﻤﻤﺘﻪ ﯾﺨﺮج ﻧﺎﺗﺞ ﺟﻤﻌﻬﻤﺎ وﺗﺮﯾﺪ أن
ﯾﻜﺮر ﻫﺬه اﻟﻌﻤﻠﯿﺔ ﻋﺸﺮات اﻟﻤﺮات ﻓﻬﻨﺎ ﺗﺴﺘﻄﯿﻊ أﺳﺘﺨﺪام اﻟﺪوال ﻓﻤﺎ ﻋﻠﯿﻚ ﺳﻮى أرﺳﺎل اﻟﺮﻗﻤﯿﻦ اﻟﺬﯾﻦ ﯾﺪﺧﻠﻬﻤﺎ
ﻓﻲ ﻛﻞ ﻣﺮة اﻟﻰ اﻟﺪاﻟﺔ .وﻟﺸﺪك ﻟﻠﻤﻮﺿﻮع أﻛﺜﺮ ﻻ أرﯾﺪ أن أﺗﻜﻠﻢ ﻓﻘﻂ ﻋﻠﻰ ﻣﺜﺎل اﻷرﻗﺎم ﻷﻋﻄﯿﻚ ﻣﺜﺎﻻ ﻧﺴﺘﺨﺪﻣﻪ
ﻓﻲ اﻟﻤﻮاﻗﻊ أﻟﺴﺖ ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻣﺸﺘﺮك ﻓﻲ ﻣﻮﻗﻊ ﻣﺎ ﺗﺪﺧﻞ أﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻠﺪﺧﻮل اﻟﻰ اﻟﻤﻮﻗﻊ وﻛﺬﻟﻚ
اﻟﺤﺎل ﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻤﺸﺘﺮﻛﯿﻦ ﻓﻲ اﻟﻤﻮﻗﻊ .إذا اﻟﻌﻤﻠﯿﺔ ﺗﺘﻜﺮر ) أي ﻓﺤﺺ أﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﻤﺮور (
ﻋﺸﺮات اﻟﻤﺮات إذا ﻟﻤﺎذا ﻻأﻋﻤﻞ داﻟﺔ ﺧﺎﺻﺔ ﯾﺪﺧﻞ ﻓﯿﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻛﻠﻤﺔ اﻟﻤﺮور وأﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﺘﻔﺤﺼﻬﺎ وﻧﺘﺄﻛﺪ
أﻧﻪ ﻣﺴﺠﻞ أم ﻻ.
ﻋﺰﯾﺰي اﻟﻤﺴﺘﺨﺪم ﻗﺪ ﻻ ﯾﺘﻮﺿﺢ اﻻﻣﺮ ﻟﺪﯾﻚ اﻟﻰ اﻻن وﻟﻜﻦ ﻻﻋﻠﯿﻚ ﻓﺎﻟﻌﯿﺐ ﻟﯿﺲ ﻣﻨﻚ ﻓﺴﻮف ﺗﺘﻮﺿﺢ ﻟﻚ اﻻﻣﻮر
ﺑﻌﺪ ﻗﻠﯿﻞ إﻧﺸﺎء اﷲ . . .
) اﻟﻤﺘﻐﯿﺮات اﻟﺘﻰ ﺳﻮف ﺗﺮﺳﻞ ﻟﻠﺪاﻟﺔ ( أﺳﻢ اﻟﺪاﻟﺔ وﺗﺨﺘﺎر أي أﺳﻢ ﺗﺮﯾﺪ ﻏﯿﺮ ﻣﺤﺠﻮز function
ﺑﺪاﯾﺔ اﻟﺪاﻟﺔ {
ﻧﻬﺎﯾﺔ اﻟﺪاﻟﺔ }
§ ﻣﻼﺣﻈﺔ :
ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ ﺻﯿﻐﺔ ﻛﺘﺎﺑﺔ اﻟﺪاﻟﺔ ﺑﺸﻜﻞ آﺧﺮ وﻫﻮ ﻛﺎﻟﺘﺎﻟﻲ :
) اﻟﻤﺘﻐﯿﺮات اﻟﺘﻰ ﺳﻮف ﺗﺮﺳﻞ ﻟﻠﺪاﻟﺔ ( أﺳﻢ اﻟﺪاﻟﺔ وﺗﺨﺘﺎر أي أﺳﻢ ﺗﺮﯾﺪ Function
{
; اﻟﻌﻤﻠﯿﺎت اﻟﺘﻰ ﺳﻮف ﺗﺘﻢ وﻣﻦ ﺛﻢ إرﺟﺎع اﻟﻨﺘﯿﺠﺔ return
}
٢٩
ﻛﻤﺎ ﺗﺮى ﻟﻢ ﻧﻐﯿﺮ أي ﺷﺊ ﻓﻘﻂ اﻟﺬي ﻏﯿﺮﻧﺎه ﺑﺪﻻ ﻣﻦ أن ﻧﻀﻊ اﻟﻌﻤﻠﯿﺎت ﻓﻮق اﻟـ ) ( returnوﻧﺨﺮج ﺑﻨﺎﺗﺞ
وﻧﻀﻌﻪ ﺑﺎﻟـ ) ( returnﻫﻨﺎ وﺿﻌﻨﺎ اﻟﻌﻤﻠﯿﺔ ﻛﺎﻣﻠﺔ ﺑﺪاﺧﻞ ) ( returnوﺑﺎﻟﺘﺎﻟﻲ ﺧﺮوج اﻟﻨﺘﯿﺠﺔ وإرﺟﺎﻋﻬﺎ
ﻣﺒﺎﺷﺮة ) .وﻟﻜﻦ ﻫﺬه اﻟﻌﻤﻠﯿﺔ ﻟﯿﺴﺖ داﺋﻤﺎ ﯾﻤﻜﻦ إﺳﺘﺨﺪاﻣﻬﺎ ( ﻟﺬﻟﻚ ﯾﻔﻀﻞ إﺳﺘﺨﺪام اﻟﺼﯿﻐﺔ اﻻوﻟﻰ وﺑﺸﻜﻞ اﻛﺜﺮ
دﻗﺔ ﺣﺴﺐ اﻟﺤﺎﺟﺔ .
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻗﺪ ﯾﻜﻮن اﻻﻣﺮ ﻟﻢ ﯾﺘﻮﺿﺢ ﻟﺪﯾﻚ ﺗﻤﺎﻣﺎ اﻟﻰ اﻻن ﻻﻋﻠﯿﻚ ﻫﺬا أﻣﺮا ﻃﺒﯿﻌﻲ ﻓﺄﻧﺖ ﻫﻨﺎ ﺗﺘﻌﻠﻢ !
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﯾﺒﺖ><head><title
>"<script type = "text/javascript
; var z
; var x=2
; var y=3
; ) document.write ( x
; ) document.write ( " <br> " + y
; ) z = summation ( x , y
; ) document.write ( " <br> " + z
></html
٣٠
ﺛﻢ ﻗﻤﻨﺎ ﺑﻄﺒﺎﻋﺔ ﻗﯿﻤﺔ ) ( xﻣﻦ ﺧﻼل اﻷﻣﺮ) ) ( document.write ( xوﺑﺎﻟﺘﺎﻟﻲ ﻃﺒﺎﻋﺔ رﻗﻢ ) ( 2ﻓﻬﺬا
اﻟﺮﻗﻢ اﻟﺬي وﺿﻌﻨﺎه ﺑﺎﻟـ ) . ( x
ﺛﻢ ﻛﺘﺒﻨﺎ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ اﻟﺨﺎﺻﺔ ﺑﻄﺒﺎﻋﺔ ﻗﯿﻤﺔ ) ( yوذﻟﻚ ﻣﻦ ﺧﻼل اﻻﻣﺮ :
)document.write (" < br > " + y
ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮ أﺳﻤﯿﻨﺎه ) ( sumوﺻﻔﺮﻧﺎه " أي ﺟﻌﻠﻨﺎ ﻗﯿﻤﺘﻪ ﺻﻔﺮا " ووﺿﻌﻨﺎ اﻟﺼﻔﺮ ﻓﻘﻂ ﻟﻜﻲ ﻧﺤﺴﺐ اﻟﺮﻗﻤﯿﻦ
ﺑﺪﻗﺔ وﻋﺪم وﺟﻮد أي ﻗﯿﻤﺔ ﺳﺎﺑﻘﺔ ﻟﻠـ ) ( sumﻓﻜﻤﺎ ﺗﺮى ﻋﻨﺪﻣﺎ ﺗﻔﺘﺢ اﻻﻟﺔ اﻟﺤﺎﺳﺒﺔ أﻻ ﺗﻀﻊ ﻟﻚ ﺻﻔﺮا ﺛﻢ
ﺗﻀﻐﻂ اﻟﺮﻗﻢ ) ( 2ﺛﻢ ﺗﻀﻐﻂ ) ( +ﺛﻢ ﺗﻀﻐﻂ رﻗﻢ ) ( 3ﻓﯿﺨﺮج ﻟﻚ اﻟﻨﺎﺗﺞ ) ( 5أي اﻟﺼﻔﺮ ﺗﺤﻮل اﻟﻰ ) ( 5
ﻓﻬﻨﺎ ﻛﺄﻧﻨﺎ ﻧﻘﻮل أن ﻗﯿﻤﺔ اﻟـ ) ( sumﻗﺒﻞ اﻟﻌﻤﻠﯿﺔ ﻛﺎﻧﺖ ﺻﻔﺮا وﺑﻌﺪ اﻟﻌﻤﻠﯿﺔ أﺻﺒﺤﺖ ) .( 5ﻟﻨﺮﺟﻊ ﻟﻤﻮﺿﻮﻋﻨﺎ
اذا ...
اﻻن ﺟﻌﻠﻨﺎ ) ( sumﺗﺴﺎوي ﻗﯿﻤﺔ اﻟـ ) ( xاﻟﻤﺮﺳﻠﺔ وﺟﻤﻌﻨﺎ ﻟﻬﺎ ﻗﯿﻤﺔ اﻟـ ) ( yاﻟﻤﺮﺳﻠﺔ أﯾﻀﺎ وﻛﻤﺎ ﺗﻌﺮف "
ﻗﯿﻤﺔ ) ( yوﻗﯿﻤﺔ ) ( xﺳﻮف ﺗﻌﺮﻓﻬﻤﺎ اﻟﺪاﻟﺔ ﻣﺒﺎﺷﺮة ﻣﻦ ﺧﻼل أرﺳﺎﻟﻨﺎ ﻓﻲ اﻟﺒﺪاﯾﺔ ﻋﻨﺪ أﺳﺘﺪﻋﺎﺋﻬﺎ ﻗﯿﻤﺔ اﻟـ ) ( x
وﻗﯿﻤﺔ ) ( yأي ) ( 2و ) " ( 3
.
وﻫﻨﺎ ﺳﻮف ﺗﺘﻢ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ أي ) ( 3 ) + ( 2وﯾﻜﻮن اﻟﻨﺎﺗﺞ ) ( 5اﻟﺬي ﺳﻮف ﻧﻀﻌﻪ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ) ( sum
إذا اﻻن أﺻﺒﺤﺖ ﻗﯿﻤﺔ ) ( sumﻫﻲ ) ( 5وﻫﻲ ﻧﺎﺗﺞ اﻟﻌﻤﻠﯿﺔ .
ﺛﻢ ﻛﺘﺒﻨﺎ ) ( returnووﺿﻌﻨﺎ ﺑﻬﺎ ﻣﺘﻐﯿﺮ ) ( sumأﺗﻌﺮف ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻣﺎذا ﺗﻌﻨﻲ ) ( return؟
ﺗﻌﻨﻲ أرﺟﻊ . .إذا ﻧﺤﻦ ﺳﻮف ﻧﺮﺟﻊ ﻗﯿﻤﺔ ) ( sumواﻟﺘﻰ ﻫﻲ ) ( 5اﻟﻰ أﯾﻦ ؟؟؟
اﻟﻰ اﻟﻤﻜﺎن ) اﻻم ( اﻟﺬي أﺳﺘﺪﻋﯿﻨﺎ ﻓﯿﻪ اﻟﺪاﻟﺔ وﻫﻮ :
; ) z = summation ( x , y
إذا ﻫﻨﺎ ﺳﻮف ﯾﻌﯿﺪ ﻟﻠﺪاﻟﺔ ) ( summationﻗﯿﻤﺔ ) ( 5ﺛﻢ وﺿﻌﻨﺎ ﻫﺬه اﻟﻘﯿﻤﺔ ﺑﺎﻟﻤﺘﻐﯿﺮ ) ( zوذﻟﻚ ﻣﻦ ﺧﻼل :
; ) z = summation ( x , y
اي ﻫﻨﺎ ﺳـﻮف ﻧﺮﺳﻞ ) ( sumﻟﯿﺲ ﻛﻤﺘﻐﯿﺮ واﻧﻤﺎ ﻛﻘﯿﻤﺔ اذا ﺳـﻮف ﯾﺮﺳﻞ رﻗـﻢ ) ( 5وﻫـﺬا رﻗﻢ ﺧﻤﺴﺔ ﻣﺎذا
ﯾﻤﺜﻞ..؟
اﻧﻪ ﯾﻤﺜﻞ ﻧﺎﺗﺞ اﻟﺪاﻟﻪ ...
) summation ( x , yوﻣﻨﻬﺎ ﺳﻮف ﯾﺘﻢ اﺳﻨﺎد اﻟﻘﯿﻤﺔ ) ( 5اﻟﻰ ) . (.z
و ﺑﻌﺪ ﺗﻨﻔﯿﺬ ﻋﻤﻠﯿﺔ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﻪ ﯾﺤﻖ ﻟﻨﺎ اﻻﻧﺘﻘﺎل اﻟﻰ اﻟﺨﻄﻮه اﻟﺘﻲ ﺗﻠﯿﻬﺎ ﻓﻲ اﻟﻜﻮد ﻓﻼ ﯾﺠﻮز اﻟﺬﻫﺎب اﻟﻰ اﻟﺨﻄﻮه
اﻟﺘﻲ ﺗﻠﯿﻬﺎ إﻻ ﺑﻌﺪ اﺳﺘﺪﻋﺎﺋﻬﺎ وﺗﻨﻔﯿﺬﻫﺎ ﻟﺘﺮﺟﻊ ﻟﻨﺎ اﻟﻨﺎﺗﺞ ﻣﺎ ﻧﻔﺬﺗﻪ وﺑﻌﺪ ذﻟﻚ ﻧﻨﺘﻘﻞ ﻟﻠﺬي ﯾﻠﯿﻬﺎ وﻫﻲ ﺑﻄﺒﺎﻋﺔ ﻗﯿﻤﺔ
) ( zﻣﻦ ﺧﻼل اﻻﻣﺮ :
٣١
ﻓﻄﺒﻊ ﻟﺪﯾﻨﺎاﻟﻘﯿﻤﺔ ) ( 5أي ) ( 5 ) = ( 3 ) + ( 2و ﻻﺣﻆ ﻋﻨﺪﻣﺎ وﺻﻠﻨﺎ اﻟﻰ ) ( returnﻛﻨﺎ ﻗﺪ أﻧﺘﻬﯿﻨﺎ ﺗﻤﺎﻣﺎ
ﻣﻦ اﻟﻌﻤﻞ ﺑﺪاﺧﻞ اﻟﺪاﻟﺔ ﻓﻠﻘﺪ ﺧﺮﺟﻨﺎ ﻣﻨﻬﺎ وﻋﺪﻧﺎ اﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ " اﻟﺬي ﺑﺎﻻﻋﻠﻰ " وﻟﻜﻦ ﻣﻌﻨﺎ ﻗﯿﻤﺔ ) . ( sum
أﻟﻢ ﺗﺘﺴﺎءل ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻫﻞ ﯾﻤﻜﻦ ﻟﻠﺪاﻟﺔ ) ( functionأن ﺗﺄﺗﻲ ﻣﻦ ﻏﯿﺮ أن ﻧﺬﻛﺮ ﺑﻬﺎ ) ( returnأي
أﻧﻬﺎ ﻻ ﺗﺮﺟﻊ أي ﺷﺊ ؟؟؟.
ﻧﻌﻢ ﻗﺪ ﻻﺗﺤﺘﻮي اﻟﺪاﻟﺔ ) ( functionﻋﻠﻰ ) ( returnوﺑﻤﺎ أﻧﻬﺎ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ) ( returnإذا ﻫﻲ ﻟﻦ
ﺗﺮﺟﻊ ﻗﯿﻤﺔ ﻓﻔﻲ ﻫﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﻧﺮى اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ اﻟﺬي ﯾﻮﺿﺢ ﻟﻨﺎ ...
ﻣﺜﺎل :
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ> <head><title
>"<script type = "text/javascript
; var x = 4 , y = 2
; ) subtract ( x , y
; )" > </h3ﻫﺬا ﻫﻮ اﻟﻨﺎﺗﺞ >document.write (" <h3
></html
٣٢
ﻛﺘﺒﻨﺎ أﺳﻢ اﻟﺪاﻟﺔ ﻃﺒﻌﺎ ووﺿﻌﻨﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ اﻟﻘﯿﻤﺘﯿﻦ اﻟﻤﺮﺳﻠﺔ ﻟﻬﺎ ﺛﻢ دﺧﻠﻨﺎ ﺑﺪاﺧﻞ اﻟﺪاﻟﻪ ﺛﻢ ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮ ) ( sub
اﻟﺬي ﺳﻮف ﻧﻀﻊ ﺑﻪ ﻧﺎﺗﺞ ﻋﻤﻠﯿﺔ اﻟﻄﺮح وﻫﻲ ) ( xﻧﺎﻗﺼﺎ ) ( yووﺿﻌﻨﺎ اﻟﻨﺎﺗﺞ ﻓﻲ ) ( subﻣﻦ ﺧﻼل ﻫﺬه
اﻟﻤﻌﺎدﻟﺔ :
sub = x – y
ﺛﻢ ﻛﺘﺒﻨﺎ أﻣﺮ ﻃﺒﺎﻋﺔ اﻟﻤﺘﻐﯿﺮ ) ( subاﻟﺬي ﻫﻮ ﻧﺎﺗﺞ اﻟﻌﻤﻠﯿﺔ ﻣﻦ ﺧﻼل اﻻﻣﺮ :
; )document.write (sub
ﻻﺣﻆ أﻧﻨﺎ ﻃﺒﻌﻨﺎ اﻟﻨﺎﺗﺞ ﻣﻦ ﺧﻼل أﻣﺮ اﻟﻄﺒﺎﻋﺔ اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺪاﻟﺔ ﺛﻢ ﻋﺪﻧﺎ اﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻄﺒﻌﻨﺎ اﻟﺠﻤﻠﺔ اﻟﻨﺼﯿﺔ .
وﻟﻜﻦ ﻫﻞ ﻣﻦ اﻟﻤﻤﻜﻦ أن ﯾﺤﺘﻮي ﺑﺮﻧﺎﻣﺠﻲ اﻟﻤﻜﺘﻮب ﺑﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻋﻠﻰ دوال ﻓﻘﻂ ...ﻛﺄن داﻟﺔ ﻧﺴﺘﺪﻋﻲ داﻟﺔ ..
ﻧﻌﻢ ﻣﻤﻜﻦ ذﻟﻚ ﻟﻨﺄﺧﺬ ﻣﺜﺎل وﻧﺮى :
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ> <head><title
>"<script type = "text/javascript
) ( function output
{
; var x = 3 , t
; ) t = cube ( x
; ) document.writeln ( t
}
></html
٣٣
وﺳﻮف أﺟﻌﻞ ﺗﺤﻠﯿﻞ ﻫﺬا اﻟﻤﺜﺎل ﻟﻚ وﻟﻜﻦ ﺳﻮف أوﺿﺢ ﻓﻘﻂ ﺑﻌﺾ اﻻﻣﻮر اﻟﺘﻰ ﺗﺴﺎﻋﺪك ﻓﻲ ﺗﺤﻠﯿﻠﻪ ...اﻟﺘﻰ أﻋﺘﻘﺪ
أﻧﻬﺎ ﺟﻌﻠﺖ ﻓﻲ ﻓﻜﺮك ﺑﻌﺾ اﻟﺘﺴﺎؤﻻت ﻋﻨﺪﻣﺎ رأﯾﺖ ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ .
-١ﻗﺪ ﺗﺘﺴﺎءل ﻟﻤﺎذا ﻟﻢ ﻧﻀﻊ ﻣﺘﻐﯿﺮ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻫﻞ ﻫﺬه اﻟﺪاﻟﺔ ﺳﻮف ﺗﺴﺘﻘﺒﻞ ﻣﺘﻐﯿﺮ " أو ﺣﺘﻰ
ﻗﯿﻤﺔ ﻣﻦ اﻟﺨﺎرج " اﻟﺠﻮاب ﻻ إذا أدﻋﻬﺎ ﻓﺎرﻏﺔ وﻻ أﺿﻊ ﺑﻬﺎ ﺷﻲء ﻓﻬﻲ داﻟﺔ ﻻﺗﺴﺘﻘﺒﻞ .
) ( function output
-٢ﻗﺪ ﺗﺘﺴﺎءل ﻟﻤﺎذا ﻛﺘﺒﻨﺎ ﻫﻨﺎ ) ( yﻣﻊ أﻧﻨﺎ ﻋﻨﺪﻣﺎ أﺳﺘﺪﻋﯿﻨﺎ ﻫﺬه اﻟﺪاﻟﺔ ﻣﻦ اﻟﺪاﻟﺔ ) ( outputﻛﺘﺒﻨﺎ ﺑﻬﺬا اﻟﺸﻜﻞ :
; ) T = cube ( x
أي وﺿﻌﻨﺎ ) ( xوﻟﯿﺲ ) ( yﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻓﻠﯿﺲ ﻣﻬﻤﺎ أن ﺗﺴﻤﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺬي أرﺳﻠﺘﻪ ﺑﻨﻔﺲ أﺳﻢ ﻣﺘﻐﺮ
اﻟﺪاﻟﺔ اﻟﻤﺮﺳﻞ ﻟﻬﺎ ﻓﻬﺬا ﻟﯿﺲ ﻣﻬﻤﺎ ﻃﺒﻌﺎ ﻟﯿﺲ ﻣﻬﻢ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮ ﻓﻲ اﻟﺪاﻟﺔ اﻟﻤﺮﺳﻞ ﻟﻬﺎ أي أﻗﺼﺪ :
) ) ( function cube ( yﻓﻬﻨﺎ اﻟﻤﻬﻢ أﻧﻨﺎ أرﺳﻠﻨﺎ ﻟﻪ ) ( xواﻟﺘﻰ ﻗﯿﻤﺘﻬﺎ ) . ( 3
ﻻﺗﻨﺰﻋﺞ ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﻤﻰ ﺑﺪﻻ ﻣﻦ ) ( x ) ( yأي ﺗﺼﺒﺢ ) ) ( function cube ( xﻓﻘﻂ ذﻛﺮﺗﻬﺎ ﻣﻦ
ﺑﺎب اﻟﻌﻠﻢ ﺑﺎﻟﺸﺊ .
-٣ﻫﻨﺎ ﺟﻌﻠﻨﺎه ﯾﻀﺮب رﻗﻢ ) ( 3ﺑﻨﻔﺴﻪ ﺛﻼﺛﺔ ﻣﺮات وإرﺟﺎع اﻟﻨﺘﯿﺠﺔ ﻣﺒﺎﺷﺮة .وﻫﺬا ﺑﺪﻻ ﻣﻦ ﺗﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ
وﻧﻀﻊ اﻟﻨﺘﯿﺠﺔ ﺑﺪاﺧﻠﻪ وﻣﻦ ﺛﻢ ﻧﺮﺳﻞ ﻫﺬا اﻟﻤﺘﻐﯿﺮ ﺑـ ) ( returnوﻧﺮﺟﻊ اﻟﻘﯿﻤﺔ ﻗﻤﻨﺎ ﺑﻮﺿﻊ اﻟﻌﻤﻠﯿﺔ اﻟﺤﺴﺎﺑﯿﺔ
ﻣﺒﺎﺷﺮة ﻓﻲ ال " ... returnﻻﺣﻆ أﻧﻨﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎ اﻧﻨﺎ ﻟﻢ ﻧﻀﻊ ﻓﻲ ال ) ( function outputﻣﺘﻐﯿﺮ
ﺑﺪاﺧﻠﻪ وﻫﺬا ﻻﻧﻪ ﻟﻦ ﯾﺴﺘﻘﺒﻞ ﻣﺘﻐﯿﺮ وﻟﻨﻘﻞ ﺑﺸﻜﻞ اﻛﺜﺮ دﻗﻪ parameterاي اﻧﻨﺎ ﻟﻦ ﻧﻤﺮر ﻋﻠﯿﻪ ﻗﯿﻢ ..واذﻛﺮﻫﺎ
ﻫﻨﺎ ﻟﻚ ﻟﻜﻲ ﻻ ﺗﻘﻮل ﻓﻲ ﻧﻔﺴﻚ ﻫﺎ ﻧﺤﻦ ﻋﺪﻧﺎ ﻟﻪ ﺑﻘﯿﻤﺔ ﻋﻤﻠﯿﺔ اﻟﻀﺮب ﺛﻼث ﻣﺮات اذا اﺳﺘﻘﺒﻞ ! ﻋﺰﯾﺰ اﻟﻤﺘﺪرب ﻫﻨﺎ
اﻟﻌﻤﻠﯿﺔ ﺗﻤﺖ ﻣﻦ ﺧﻼل returnوﻟﯿﺲ ارﺳﺎل ﻗﯿﻢ ﻟﺘﻤﺮﯾﺮﻫﺎ ﻟﯿﺘﻢ ﻋﻠﯿﻬﺎ ﻋﻤﻠﺔ ﻣﻌﯿﻨﻪ اي ﻫﻨﺎ ﺗﻢ اﺳﺘﺪﻋﺎء داﻟﺔ ﻟﺘﻘﻮم
ﺑﻌﻤﻠﯿﺔ وﺗﺮﺟﻊ ﻟﻨﺎ ﻗﯿﻤﻪ ..ﺗﺬﻛﺮ ﻋﻨﺪﻣﺎ ﻛﻨﺎ ﻧﺴﺘﺪﻋﻲ اﻟﺪاﻟﻪ ﻣﻦ داﺧﻞ ﺑﺮﻧﺎﻣﺞ ﻣﻦ دون ان ﯾﻜﻮن ﺑﺎدﺧﻞ داﻟﺔ اﺧﺮى
.
; return y*y*y
٣٤
; var z
; z = y*y*y
; return z
ﻓﻘﻂ أﺣﺒﺒﺖ أن أرﯾﻚ ﻃﺮﯾﻘﺔ ﺛﺎﻧﯿﺔ ﻣﻦ ﺑﺎب اﻟﻌﻠﻢ ﺑﺎﻟﺸﺊ ﻓﻘﻂ ﻻ ﻏﯿﺮ وﻗﺪ ﺗﻠﺠﺄ ﻟﻪ ﻋﻨﺪ اﻟﺤﺎﺟﻪ .
٣٥
§ اﻟﻤﺼﻔﻮﻓﺎت ) : ( Arrays
ﻫﻨﺎ ﺳﻮف ﻧﺘﻄﺮق اﻟﻰ ﻣﻮﺿﻮع ذا أﻫﻤﯿﺔ وﻫﻮ اﻟﻤﺼﻔﻮﻓﺎت ﻓﺒﺈﺳﺘﻌﻤﺎﻟﻬﺎ ﻧﺴﺘﻄﯿﻊ ﺗﻮﻓﯿﺮ اﻟﻮﻗﺖ واﻟﺠﻬﺪ ﺑﺎﻻﺿﺎﻓﺔ
اﻟﻰ ﺟﻌﻞ اﻟﺒﺮﻧﺎﻣﺞ أﺻﻐﺮ ﺣﺠﻤﺎ وأﺳﺮع ﺗﻨﻔﯿﺬا .
-١ﻫﻨﺎ ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮ ﻫﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ) ( 5ﻋﻨﺎﺻﺮ أﻣﺎ ﻣﺎﻗﯿﻤﺔ ﻫﺬه اﻟﻌﻨﺎﺻﺮ ﻓﺴﻮف ﻧﺬﻛﺮﻫﺎ
داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ .
-٢وﻫﻨﺎ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ أﻧﻪ ﻣﺼﻔﻮﻓﺔ دون ﺗﺤﺪﯾﺪ ﻛﻢ ﻋﻨﺼﺮا ﺗﺤﺘﻮي وﻫﻨﺎ ﯾﺠﺐ أن ﻧﺤﺪد ﻛﻢ ﻋﺪد ﻋﻨﺎﺻﺮ
اﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ " اﻗﺼﺪ ﻓﻲ اﻟـ ) ( forاو ﻣﺎ ﺷﺎﺑﻪ " ﻛﺄن ﻧﺬﻛﺮﻫﺎ ﻓﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻣﺜﻼ أﻣﺎ ﻣﺎ
ﻗﯿﻤﺔ ﻫﺬه اﻟﻌﻨﺎﺻﺮ ﻓﺴﻮف ﻧﺬﻛﺮﻫﺎ أﯾﻀﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ .
-٣وﻫﻨﺎ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ أﻧﻪ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻﺮ ﻓﻮﺿﻌﻨﺎ ﻓﻲ ﻛﻞ ﻋﻨﺼﺮ ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﻣﻌﯿﻨﺔ
.وﻋﺎدة ﺗﺴﺘﺨﺪم ﺗﻌﺮﯾﻒ اﻟﻤﺼﻔﻮﻓﺔ ﺑﻬﺬا اﻟﺸﻜﻞ ﻋﻨﺪﻣﺎ ﺗﻜﻮن اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ أرﻗﺎم .
; ] a = [ 3, 14, 6
-٤ﻫﻨﺎ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( aﻋﻠﻰ أﻧﻪ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻﺮ وﻛﺎﻧﺖ ﻗﯿﻤﺔ ﻛﻞ ﻋﻨﺼﺮ ﻣﺒﯿﻨﺔ ﻣﻨﺬ
اﻟﺒﺪاﯾﺔ أي ) ( 1,2,3أو ) "ﻣﺤﻤﻮد" " ،ﺛﺎﻣﺮ" " ،ﺳﺎﻣﻲ" ( أﻣﺎ ﻛﯿﻒ ﻋﺮﻓﻨﺎ أن اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ
ﻋﻨﺎﺻﺮ ﻓﻬﻮ ﻋﺪد ﻣﺎﺑﺪاﺧﻠﻬﺎ إذا ﻫﻲ ﻣﺼﻔﻮﻓﺔ ﻋـﺪد ﻋﻨﺎﺻﺮﻫﺎ ﺛﻼث أﻣﺎ ﻣﺎﻫﻲ ﻗﯿﻤﺔ ﻋﻨﺎﺻﺮﻫﺎ ﻓﻬﻲ ) ( 1,2,3أو
)ﻣﺤﻤﻮد ،ﺛﺎﻣﺮ ،ﺳﺎﻣﻲ ( .وﻻﺣﻆ أﻧﻪ ﻋﻨﺪﻣﺎ ﺗﺤﺘﻮي اﻟﻤﺼﻔﻮﻓﺔ ﻋﻠﻰ ﻧﺺ " إذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ ) ( stringأي
أﺳﻢ او ﻣﺎ ﺷﺎﺑﻪ ﯾﺠﺐ وﺿﻊ اﻟﻜﻠﻤﺔ ﺑﯿﻦ ) " ( .
; ) " ﻣﺤﻤﻮد " " ,ﺛﺎﻣﺮ " " ,ﺳﺎﻣﻲ " ( a = new Array
; )" ﻋﻤﺎد " ",أﺷﺮف " ",أﯾﻬﻢ " ",ﻣﺤﻤﺪ "( a = new Array
٣٦
إذا ﻫﻨﺎ اﻟﻤﻮﻗﻊ اﻷول ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﯾﺴﺎوي ﻣﺤﻤﺪ واﻟﻤﻮﻗﻊ اﻟﺜﺎﻧﻲ أﯾﻬﻢ واﻟﻤﻮﻗﻊ اﻟﺜﺎﻟﺚ أﺷﺮف واﻟﻤﻮﻗﻊ اﻟﺮاﺑﻊ ﻋﻤﺎد
.وﻟﻜﻦ ﻋﺎدة ﻓﻲ اﻟﻤﺼﻔﻮﻓﺎت ﻧﺒﺪأ ﻣﻦ اﻟﺼﻔﺮ وﻟﯿﺲ ﻣﻦ اﻟﻮاﺣﺪ أي ﻧﻘﻮل ﻣﻮﻗﻊ اﻟﺼﻔﺮ ﯾﺴﺎوي ﻣﺤﻤﺪ و اﻟﻤﻮﻗﻊ
اﻻول ﯾﺴﺎوي أﯾﻬﻢ واﻟﻤﻮﻗﻊ اﻟﺜﺎﻧﻲ ﯾﺴﺎوي أﺷﺮف واﻟﻤﻮﻗﻊ اﻟﺜﺎﻟﺚ ﯾﺴﺎوي ﻋﻤﺎد .
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻻﺗﻨﺰﻋﺞ ﻣﻦ ذﻟﻚ أﻋﺘﺒﺮ اﻟﻌﻤﺎرة ﺗﺘﻜﻮن ﻣﻦ ﻃﺎﺑﻖ أرﺿﻲ وﻃﺎﺑﻖ أول وﻃﺎﺑﻖ ﺛﺎﻧﻲ وﻃﺎﺑﻖ ﺛﺎﻟﺚ
إذا ﻣﺤﻤﺪ ﺳﻮف ﯾﺴﻜﻦ ﻓﻲ اﻟﻄﺎﺑﻖ اﻻرﺿﻲ وﻫﻮ اﻟﺼﻔﺮ أي ﻣﻮﻗﻊ رﻗﻢ ﺻﻔﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وأﯾﻬﻢ ﻓﻲ اﻟﻄﺎﺑﻖ
اﻷول أﯾﺎ اﻟﻤﻮﻗﻊ اﻻول ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وأﺷﺮف ﻓﻲ اﻟﻄﺎﺑﻖ اﻟﺜﺎﻧﻲ أي اﻟﻤﻮﻗﻊ اﻟﺜﺎﻧﻲ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وﻋﻤﺎد ﻓﻲ
اﻟﻄﺎﺑﻖ اﻟﺜﺎﻟﺚ أي اﻟﻤﻮﻗﻊ اﻟﺜﺎﻟﺚ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ .
أﻣﺎ ﺗﻤﺜﯿﻞ اﻟﻤﺼﻔﻮﻓﺔ ﺑﺪاﺧﻞ اﻟﺠﻬﺎز اي ال " " Memoryﻓﯿﻜﻮن ﺑﻬﺬا اﻟﺸﻜﻞ...
" ﺳﻮف أﺿﻊ رﺳﻤﺔ ﺗﻮﺿﯿﺤﯿﺔ ﻟﺘﻮﺿﺢ ﻟﻚ ﻛﻞ ﺷﺊ " :
]a[0 50
]a[1 90
ﻣﻘﺪار اﻟﻘﯿﻤﺔ اﺳﻢ ال 20
]a[2
اﻟﻤﺨﺰﻧﺔ ﺑﺪاﺧﻞ Array
ال Array 45
رﻗﻢ اﻟﻤﻮﻗﻊ اﻟﻤﺴﻤﻰ ]a[3
Index
ﻣﺜﺎل :
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; )"ﺣﻤﺪ" ",ﻣﺤﻤﻮد " ",أﺣﻤﺪ " ",ﻣﺤﻤﺪ "( var name = new Array
; var i
) for (i = 0 ; i < name.length ; i ++
; )" >document.writeln ( name[i] + " <br /
></script
></head
><body></body
></html
٣٧
دﻋﻨﺎ ﻧﺤﻠﻞ اﻟﻤﺜﺎل ﺳﻮﯾﺎ . .
أول ﺷﺊ ﻋﺮﻓﻨﺎ أﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ وﺿﻌﻨﺎ ﺑﻬﺎ أرﺑﻌﺔ ﻗﯿﻢ أذا ﻫﻨﺎ ﻧﺤﻦ ﻣﺘﻔﻘﯿﻦ أﻧﻨﺎ ﻋﺮﻓﻨﺎ ﻣﺼﻔﻮﻓﺔ أﺳﻤﻬﺎ
) ( nameﺗﺤﺘﻮي ﻋﻠﻰ أرﺑﻌﺔ ﻣﻮاﻗﻊ ﻛﻞ ﻣﻮﻗﻊ ﯾﺤﺘﻮي ﻋﻠﻰ إﺳﻢ ﺑﺪاﺧﻠﻪ .ﺛﻢ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( iاﻟﺬي
ﺳﻨﺴﺘﺨﺪﻣﻪ ﻓﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار .أﺳﺘﺨﺪﻣﻨﺎ ﻓﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻫﺬه اﻟﻌﺒﺎرة ) ( name.lengtﻓﺘﻌﻨﻲ أن ﺗﺴﺘﻤﺮ
ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﻰ أن ﯾﻨﺘﻬﻲ ﻃﻮل اﻟﻤﺼﻔﻮﻓﺔ أي أن ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺳﻮف ﺗﺴﺘﻤﺮ أرﺑﻌﺔ ﻣﺮات ﻷن اﻟﻤﺼﻔﻮﻓﺔ
ﺗﺤﺘﻮي ﻋﻠﻰ أرﺑﻌﺔ ﻣﻮاﻗﻊ وﺑﻤﺎ أﻧﻨﺎ ﺑﺪأﻧﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻣﻦ ﺻﻔﺮ أذا ﺳﻮف ﯾﻤﺸﻲ . 3 2 1 0أذا ﺻﯿﻐﺔ ﻃﻮل
اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻰ ﺗﻜﺘﺐ ﺑﺎﻟﺘﻜﺮار ﺗﻜﺘﺐ ﻛﺎﻟﺘﺎﻟﻲ :
. lengthأﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب إذا أﻧﺰﻋﺠﺖ ﻣﻨﻬﺎ ﺗﺴﺘﻄﯿﻊ أن ﻻﺗﻀﻌﻬﺎ .ﺗﺴﺘﻄﯿﻊ وﺿﻊ رﻗﻢ ) .. ( 4ﺑﺪﻻ ﻣﻨﻬﺎ ﻓﻨﺤﻦ ﻓﻲ ﻫﺬه
اﻟﻤﺼﻔﻮﻓﺔ ﺟﻌﻠﻨﺎﻫﺎ ﺗﺤﺘﻮي ﻋﻠﻰ أرﺑﻌﺔ ﻣﻮاﻗﻊ .ﻓﺒﺎﻟﺘﺎﻟﻲ ﻧﺠﻌﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺗﻤﺮ ﻋﻠﻰ اﻻرﺑﻌﺔ ﻣﻮاﻗﻊ .ﻗﺪ ﺗﺘﺴﺎءل
ﻛﯿﻒ أﺿﻊ ) ( 4ﻓﻨﺤﻦ ﻟﺪﯾﻨﺎ ) ( 4ﻋﻨﺎﺻﺮ إذا ﯾﺠﺐ أن ﯾﻜﻮن اﻟﻌﺪ اﻟﻰ ) ( 3أي ) ( 3 , 2 , 1 , 0اى
ارﺑﻌﺔ اﺳﻤﺎء ﻓﻬﻨﺎ ﯾﻌﺘﺒﺮ اﻟﻌﺪ ﻻرﺑﻌﺔ ﻣﻮاﻗﻊ . .ﻧﻌﻢ ﻛﻼﻣﻚ ﺻﺤﯿﺢ %100وﻟﻜﻨﻨﻲ ﻓﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺑﺪأﻧﺎ ﻣﻦ
) ( 0ﺛﻢ ﻗﻠﺖ أﺻﻐﺮ ﻣﻦ ) ( 4أي أن ) ( 4ﻟﯿﺴﺖ داﺧﻠﺔ .ﻓﻠﻢ أﻗﻞ أﺻﻐﺮ أو ﺗﺴﺎوي ) . ( 4ﻛﺬﻟﻚ اﻟﺤﺎل
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠـ ) ..( name.length
ذﻛﺮت داﺧﻞ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ ) ] ( name[iواﻋﻨﻲ ﺑﻬﺎ أﻧﻨﻲ أرﯾﺪ ﻃﺒﺎﻋﺔ ﻣﺎﯾﺤﺘﻮﯾﻪ ﻛﻞ ﻣﻮﻗﻊ ﻣﻦ ﻣﻮاﻗﻊ
اﻟﻤﺼﻔﻮﻓﺔ .أي ﻛﺄﻧﻨﻲ أﻗﻮل أرﯾﺪ ﻃﺒﺎﻋﺔ أﺳﻢ ﻛﻞ ﺷﺨﺺ ﯾﺴﻜﻦ ﻓﻲ ﻛﻞ ﻃﺎﺑﻖ ﻣﻦ ﻃﻮاﺑﻖ اﻟﻌﻤﺎرة . . .ﺗﺬﻛﺮ ﻛﻤﺎ
ﻗﻠﻨﺎ ﺳﺎﺑﻘﺎ .إذا ﻛﯿﻒ أﻓﻌﻞ ذﻟﻚ . .أﻛﺘﺐ أﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻢ أﻓﺘﺢ اﻟﻘﻮس "[" أﺿﻊ رﻗﻢ اﻟﻤﻮﻗﻊ . .ﺛﻢ أﻏﻠﻖ
اﻟﻘﻮس "]" ﻛﺄن ﻣﺜﻼ أﻗﻮل ) ] ( name[0ﻓﻬﺬا ﯾﻌﻨﻲ أرﯾﺪ أن أﻋﺮف ﻣﺎﯾﺤﺘﻮي ﻋﻠﯿﻪ اﻟﻤﻮﻗﻊ ﺻﻔﺮ ﻓﻲ
اﻟﻤﺼﻔﻮﻓﺔ وﻃﺒﻌﺎ ﻫﻮ ﻣﺤﻤﺪ .وﻫﺬا ﻣﺎﺳﻮف ﯾﺤﺪث ﺑﺤﻠﻘﺔ اﻟﺘﻜﺮار ﻓﺄول ﻣﺮة ﺳﻮف ﺗﺮﺳﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻗﯿﻤﺔ ) ( i
ﺻﻔﺮا وﺑﻤﺎ أﻧﻨﻲ واﺿﻊ ) ] ( name [iإذا ﺳﻮف ﯾﻜﻮن ) ] ( name [0أي أﻃﺒﻊ ﻣﺎﯾﺤﺘﻮﯾﻪ اﻟﻤﻮﻗﻊ ﺻﻔﺮ
واﻟﺬي ﻫﻮ ﻣﺤﻤﺪ ﺛﻢ ﯾﻨﺰل ﺳﻄﺮا وﻧﻌﻮد ﻣﺮة ﺛﺎﻧﯿﺔ اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﺗﻜﻮن ﻗﯿﻤﺔ اﻟـ ) ( iﻗﺪ زﯾﺪ ﻋﻠﯿﻬﺎ واﺣﺪ
ﻟﺘﺼﺒﺢ ) ( 1ﻓﻨﺪﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار وﺗﻜﻮن ) ] ( name [1أي أﻃﺒﻊ ﻣﺎﯾﺤﺘﻮﯾﻪ اﻟﻤﻮﻗﻊ رﻗﻢ ) ( 1وﻫﻮ أﺣﻤﺪ .
ﺛﻢ ﯾﻨﺰل ﺳﻄﺮ وﯾﻌﻮد ﻣﺮة ﺛﺎﻧﯿﺔ اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﺘﻜﻮن ﻗﯿﻤﺔ ) ( iﻗﺪ زادت واﺣﺪ ﻟﺘﺼﺒﺢ ) ( 2ﻓﺘﺪﺧﻞ ﻗﯿﻤﺔ
) ( iاﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﺘﺼﺒﺢ ) ] ( name [2أي أﻃﺒﻊ ﻗﯿﻤﺔ اﻟﻤﻮﻗﻊ اﻟﺜﺎﻧﻲ اﻟﺘﻰ ﻫﻲ ﻣﺤﻤﻮد .ﺛﻢ ﺗﻌﻮد ﻗﯿﻤﺔ
) ( iﺑﻌﺪ أن زﯾﺪت ﺑﻮاﺣﺪ أي ) ( 3ﻓﺘﺪﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﺘﺼﺒﺢ ) ] ( name [3أي أﻃﺒﻊ ﻗﯿﻤﺔ اﻟﻤﻮﻗﻊ اﻟﺜﺎﻟﺚ
ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﻫﻮ ﺣﻤﺪ .ﺛﻢ ﺗﻌﻮد ﻗﯿﻤﺔ اﻟـ ) ( iﺑﻌﺪ أن زﯾﺪت ﺑﻮاﺣﺪ اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﻼ ﯾﺘﺤﻘﻖ اﻟﺸﺮط واﻟﺬي
ﻫﻮ ) ( i < name.lengthأي أﻗﻞ ﻣﻦ ) ( 4ﻓﺈذا ﻻﯾﺘﺤﻘﻖ اﻟﺸﺮط ﻓﻨﺨﺮج ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار أي ﻧﺘﻮﻗﻒ .
وﻫﻨﺎ ﯾﻨﺘﻬﻲ اﻟﺒﺮﻧﺎﻣﺞ وﯾﻜﻮن ﻗﺪ ﻃﺒﻊ ﻟﻨﺎ :
ﻣﺤﻤﺪ
أﺣﻤﺪ
ﻣﺤﻤﻮد
ﺣﻤﺪ
٣٨
§ ﻣﻼﺣﻈﺔ ﻣﻬﻤﺔ :
ﺻﯿﻐﺔ ) . lengthاﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ( ﻧﺴﺘﻌﻤﻠﻬﺎ ﻓﻘﻂ ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻃﻮل اﻟﻤﺼﻔﻮﻓﺔ ﻣﻌﻠﻮم ﻟﺪﯾﻨﺎ ﻋﻨﺪ ﺗﻌﺮﯾﻔﻨﺎ
ﻟﻠﻤﺼﻔﻮﻓﺔ .وﻫﻨﺎ ﯾﻤﻜﻦ ان ﻧﻌﺮف ﻃﻮﻟﻬﺎ ﻋﻠﻰ ﺷﻜﻠﯿﻦ :
ﻣﺜﻼ :
ﻣﺜﻼ :
; )a = newArry (2,4,6
ﻣﺜﻼ :
; ) ( a = newArra
ﻓﻬﻨﺎ ﻧﺤﻦ اﺛﻨﺎء ﺗﻌﺮﯾﻔﻨﺎ ﻟﻠﻤﺼﻔﻮﻓﺔ ﻟﻢ ﻧﺤﺪد ﻋﻠﻰ ﻛﻢ ﻣﻮﻗﻊ ﺗﺤﺘﻮي إذا ﻛﯿﻒ ﻧﺴﺘﺨﺪم ) ( .lengthﻓﻨﺤﻦ ﻻ ﻧﻌﺮف
ﻃﻮل اﻟﻤﺼﻔﻮﻓﺔ أي ﻋﺪد ﻣﻮاﻗﻌﻬﺎ .إذا ﻫﻨﺎ ﯾﺠﺐ ﻋﻠﯿﻨﺎ ان ﻧﺤﺪد ﻃﻮل اﻟﻤﺼﻔﻮﻓﺔ ﺑﺤﻠﻘﺔ اﻟﺘﻜﺮار أي ﺑﺪﻻ ﻣﻦ ان
ﻧﻀﻊ ) ( a.lengthﻧﻀﻊ ﻣﺜﻼ رﻗﻢ ) ( 3وﻫﺬا ﯾﺪﻟﻨﺎ ﻛﻢ ﻣﻮﻗﻊ ﻧﺮﯾﺪ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ .
ﻣﺜﺎل :
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; var i
; )(var number=new Array
)for (i=0 ; i<4 ; i++
{
; number[i] = i
;)">document.writeln(number[i] + "<br
}
></script
></head
><body></body
></html
٣٩
ﺗﺤﻠﯿﻞ ﻫﺬا اﻟﻤﺜﺎل اﺗﺮﻛﻪ ﻟﻚ ....وﻟﻜﻦ ﺳﻮف اﺿﻊ ﻟﻚ ﻣﻼﺣﻈﺘﯿﻦ ﺗﺴﻬﻞ ﻋﻠﯿﻚ ﺗﺤﻠﯿﻠﻪ ...
) ( i<4ﻧﻌﻨﻲ ﺑﻬﺎ اﻧﻨﺎ ﻧﺮﯾﺪ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ارﺑﻌﺔ ﻣﻮاﻗﻊ " ﺗﺬﻛﺮ اﻧﻨﺎ ﺑﺪأﻧﺎ ﻣﻦ ) . " ( 0 •
) ( number[i] = iﻧﻌﻨﻲ ﺑﻬﺎ ان اﻟﻤﺼﻔﻮﻓﺔ ﻋﺮﻓﻨﺎﻫﺎ ﻓﻲ اﻟﺒﺪاﯾﺔ وﻟﻢ ﻧﻀﻊ ﺑﻬﺎ ﻗﯿﻢ .ﻓﻬﻨﺎ ﻧﻀﻊ ﺑﻬﺎ اﻟﻘﯿﻢ •
أي ﻛﺄﻧﻨﺎ ﻧﻘﻮل ﻣﻮﻗﻊ اﻟﺼﻔﺮ ﺿﻊ ﺑﻪ ) ( 0وﻣﻮﻗﻊ اﻟﻮاﺣﺪ ﺿﻊ ﺑﻪ ) ( 1وﻫﻜﺬا .أي :
اذا ﻧﺤﻦ ﻫﻨﺎ ﻗﻤﻨﺎ ﺑﺘﻌﺒﺌﺔ ﻣﻮاﻗﻊ اﻟﻤﺼﻔﻮﻓﺔ ﺑﻘﯿﻢ وﻣﻦ ﺛﻢ ﻃﺒﻌﻨﺎﻫﺎ .
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻧﻜﻮن ﻫﻨﺎ ﻗﺪ اﻧﻬﯿﻨﺎ اﻟﺤﺪﯾﺚ ﻋﻦ اﻟﻤﺼﻔﻮﻓﺎت ذات اﻟﺒﻌﺪ اﻟﻮاﺣﺪ اﻟﻤﺴﻤﺎة : §
" . (1D) " One Dimension Array
إذا ﺑﻘﻲ ﻋﻠﯿﻨﺎ اﻟﺸﻜﻞ اﻻﺧﺮ ﻟﻠﻤﺼﻔﻮﻓﺔ وﻫﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻤﺴﻤﺎة : §
" . (2D) " Tow Dimension Array
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; ] ]var arr = [ [1,3,5,7] , [3,3,3,3] , [9,1,4,0
;)"></h2><ttﻃﺒﺎﻋﺔ ﻣﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔاﻷﺑﻌﺎد>document.writeln("<h2
)for (i=0 ;i< arr.length;++i
{
)for (j=0 ;j< arr[i].length;++j
;)" " document.writeln(arr[i] [j] +
;)">document.writeln("<br /
}
;)" >document.writeln("</tt
></script
></head
><body></body
></html
٤٠
ﻟﻨﺤﻠﻞ اﻟﻤﺜﺎل ﺳﻮﯾﺎ ...
أﺧﻲ اﻟﻤﺘﺪرب ﺷﺮﺣﻲ ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﺳﻮف ﯾﻜﻮن ﻃﻮﯾﻼ وﻗﺪ أﺛﻘﻞ ﻋﻠﯿﻚ ﻣﻦ ﻛﺜﺮة ﻣﺎ ﺳﻮف ﺗﻘﺮأ وﻟﻜﻦ ذﻟﻚ ﻣﻦ
أﺟﻞ إﯾﺼﺎل اﻟﻤﻌﻠﻮﻣﺔ ﻟﻚ ﺑﺎﻟﺘﻔﺼﯿﻞ إﻟﻰ أﺑﻌﺪ اﻟﺤﺪود ﻓﺄﻋﺬرﻧﻲ ﻓﻜﻤﺎ ﻫﻮ ﺷﺎق ﻋﻠﯿﻚ ﺑﺎﻟﻘﺮاءة ﻫﻮ ﺷﺎق ﻋﻠﻲ ﺑﺎﻟﻜﺘﺎﺑﺔ
واﻟﺸﺮح .....
ﻫﻨﺎ ﻗﻤﻨﺎ ﺑﺘﻌﺮﯾﻒ اﻟﻤﺼﻔﻮﻓﺔ وﻛﺎﻧﺖ ﻫﺬه اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎت ﻻ ﺗﻨﺰﻋﺞ ﻣﻦ ذﻟﻚ ﻓﻘﺪ
ﻛﻨﺎ ﻧﻘﻮل ﻓﻲ اﻟﻤﺎﺿﻲ ان اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻﺮ وﻫﻨﺎ ﻧﻘﻮل ﺗﺤﺘﻮي اﻟﻤﺼﻔﻮﻓﻪ ﻋﻠﻰ ﺛﻼﺛﺔ
ﻣﺼﻔﻮﻓﺎت أي ﻋﻤﻠﯿﺔ ﺗﺪاﺧﻠﯿﺔ .اﻻن ﯾﺠﺐ أن ﻧﻌﺮف ﺷﯿﺌﺎ ...
ﻫﺬه اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺑﺪاﺧﻠﻬﺎ ﻣﺼﻔﻮﻓﺎت ﻫﻲ ) ﻛﻢ ﻋﺎﻣﻮدا ﻓﻲ ﻛﻞ ﺻﻒ ( ) (rows & columnsوﻫﻨﺎ ﻃﺒﻌﺎ
ﻣﺼﻔﻮﻓﺘﻨﺎ ﻫﺬه ﺳﻮف ﺗﺘﻜﻮن ﻣﻦ أرﺑﻌﺔ أﻋﻤﺪة وﺛﻼﺛﺔ ﺻﻔﻮف .إذا أﺑﻌﺎدﻫﺎ ) ( 4 x 3ﻛﯿﻒ ﻋﺮﻓﻨﺎ ذﻟﻚ ؟
ﻻﺣﻆ أن اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻛﺎﻧﺖ ﺗﺤﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎت ﺑﺪاﺧﻠﻬﺎ إذا اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ ﺗﺤﺘﻮي ﻋﻠﻰ
ﺛﻼﺛﺔ ﺻﻔﻮف وﻛﺎن ﻛﻼ ﻣﻦ ﻫﺬه اﻟﻤﺼﻔﻮﻓﺎت ﯾﺤﺘﻮي ﻋﻠﻰ ارﺑﻌﺔ ﻋﻨﺎﺻﺮ إذا اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ أﯾﻀﺎ ﺳﻮف
ﺗﺘﻜﻮن ﻣﻦ أرﺑﻌﺔ أﻋﻤﺪة وﻫﻲ ﻋﺪد اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺎت اﻟﺘﻲ ﺑﺪاﺧﻠﻬﺎ ﻓﻘﺪ ﻛﺎﻧﺖ ﻛﻞ ﻣﺼﻔﻮﻓﺔ ﻣﻦ ﻫﺬه
اﻟﻤﺼﻔﻮﻓﺎت ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻢ ﺑﺪاﺧﻠﻬﺎ وﻛﺎﻧﺖ ﻛﻞ واﺣﺪه ﺗﺘﻜﻮن ﻣﻦ ارﺑﻌﺔ ﻣﻮاﻗﻊ اذا .. .
ﺛﻢ ﻛﺘﺒﻨﺎ أﻣﺮ ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ ﻧﺼﯿﺔ واﻟﺘﻲ ﻫﻲ " ﻃﺒﺎﻋﺔ ﻣﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔ اﻷﺑﻌﺎد " ووﺿﻌﻨﺎ ﻫﺬا اﻟﻮﺳﻢ ) > ( <ttاﻟﺬي
ﺳﻮف أﻏﻠﻘﻪ ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻛﻠﯿﺎ ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻘﻂ ﻟﻜﻲ ﯾﻄﺒﻊ ﻟﻲ اﻟﺒﺮﻧﺎﻣﺞ ﻛﻞ اﻻرﻗﺎم اﻟﺘﻲ ﺗﺤﺘﻮﯾﻬﺎ اﻟﻤﺼﻔﻮﻓﺔ ﺑﺸﻜﻞ
اﻵﻟﺔ اﻟﻄﺎﺑﻌﺔ وﺗﺴﺘﻄﯿﻊ ان ﻻ ﺗﻀﻌﻪ .
ﻗﺒﻞ اﻟﺪﺧﻮل اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار أﻧﺖ ﺗﻌﻠﻢ ﺟﯿﺪا ان ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﻲ ﻛﻞ ﻣﺮة ﻧﺪﺧﻞ ﺑﻬﺎ داﺧﻠﻬﺎ ﯾﺠﺐ اﻟﻌﻮدة ﻟﻬﺎ أﻛﺜﺮ
ﻣﻦ ﻣﺮة ﺣﺘﻰ ﯾﻔﺸﻞ اﻟﺸﺮط ﻓﻨﺨﺮج ﻣﻨﻬﺎ " أي ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط " ﻓﻤﺎذا ﻟﻮ ﻛﺎن ﻟﺪﯾﻨﺎ ﺣﻠﻘﺔ ﺗﻜﺮار ﺑﺪاﺧﻠﻬﺎ ﺣﻠﻘﺔ
ﺗﻜﺮار أﺧﺮى ﻓﻲ ﻫﺬه اﻟﺤﺎﻟﺔ ﻧﺪﺧﻞ ﻓﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻻوﻟﻰ أي اﻟﺮﺋﯿﺴﯿﺔ ﻓﻨﺠﺪ ﺑﺪاﺧﻠﻬﺎ ﺣﻠﻘﺔ ﺗﻜﺮار أﺧﺮى وﻫﻨﺎ
ﺳﻮف ﻧﺪﺧﻞ ﺑﺪاﺧﻞ ﻫﺬه اﻟﺤﻠﻘﺔ وﻧﺴﺘﻤﺮ ﺑﺘﻨﻔﯿﺬ ﻣﺎ ﺑﺪاﺧﻠﻬﺎ واﻟﻌﻮدة ﻟﻬﺎ ﺣﺘﻰ ﯾﻔﺸﻞ ﺷﺮﻃﻬﺎ وﺑﺎﻟﺘﺎﻟﻲ اﻟﺨﺮوج ﻣﻨﻬﺎ
واﻟﻌﻮدة اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻻوﻟﻰ ﻛﺪورة ﺛﺎﻧﯿﺔ ﻟﻬﺎ ﻓﻨﺪﺧﻞ ﺑﺪاﺧﻠﻬﺎ ﻓﻨﺠﺪ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺜﺎﻧﯿﺔ ﻣﺮة أﺧﺮى ﻓﻨﺴﺘﻤﺮ
ﺑﺘﻨﻔﯿﺬ ﻣﺎ ﺑﺪاﺧﻠﻬﺎ أي اﻟﺘﻜﺮار ﺣﺘﻰ ﯾﻔﺸﻞ اﻟﺸﺮط " أي ﻋﺪم ﺗﺤﻘﻘﻪ " .
ﺛﻢ ﻧﺨﺮج ﻣﻦ ﻫﺬه اﻟﺤﻠﻘﺔ وﻧﻌﻮد اﻟﻰ اﻟﺤﻠﻘﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻣﺮة أﺧﺮى وﻫﻜﺬا ﺣﺘﻰ ﯾﻔﺸﻞ ﺷﺮط ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ
وﺑﺎﻟﺘﺎﻟﻲ ﻋﺪم اﻟﺪﺧﻮل ﺑﺪاﺧﻠﻬﺎ وﻋﺪم اﻟﺪﺧﻮل ﺑﺤﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺘﻲ ﺑﺪاﺧﻠﻬﺎ " أي اﻟﺤﻠﻘﺔ اﻟﺜﺎﻧﯿﺔ " وﺑﺎﻟﺘﺎﻟﻲ اﻟﺨﺮوج
ﺗﻤﺎﻣﺎ .
اﻻن ﻟﻨﺪﺧﻞ ﺑﺤﻠﻘﺔ اﻟﺘﻜﺮار ﺑﺒﺮﻧﺎﻣﺠﻨﺎ وﻧﺸﺮﺣﻬﺎ وﻟﻜﻦ ﻗﺒﻞ ذﻟﻚ دﻋﻨﺎ ﻧﺘﻔﻖ ﻋﻠﻰ ﻣﺴﻤﯿﺎت ﻣﺠﺎزﯾﺔ " إذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ
" اﺳﺘﺨﺪﻣﻬﺎ ﻓﻘﻂ ﻣﻦ أﺟﻞ اﻟﺘﻮﺿﯿﺢ ﻻ أﻛﺜﺮ :
٤١
ﻧﺴﻤﻲ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻻوﻟﻰ اﻟﺘﻲ ﺑﺒﺮﻧﺎﻣﺠﻨﺎ اﻟﻤﺤﺘﻮﯾﺔ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ ) : ( iﺑـ " ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ "
وﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺜﺎﻧﯿﺔ أي اﻟﺘﻲ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻻوﻟﻰ اﻟﻤﺤﺘﻮﯾﺔ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ ) : ( jﺑـ " ﺣﻠﻘﺔ اﻟﺘﻜﺮار
اﻟﺪاﺧﻠﯿﺔ " .
ﻋﺮﻓﻨﺎ ﻫﻨﺎ ﺑﺒﺮﻧﺎﻣﺠﻨﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ وﻋﺮﻓﻨﺎ ﺑﺪاﺧﻠﻬﺎ اﻟﻤﺘﻐﯿﺮ ) ( iوﺟﻌﻠﻨﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﺗﺒﺪأ ﻣﻦ ) ( 0اﻟﻰ
ﻃﻮل اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ اﻟﺘﻲ ﺗﺤﺘﻮي ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ اﻟﻤﺼﻔﻮﻓﺎت .وﺑﻤﺎ أن ﻟﺪﯾﻨﺎ ﺑﺪاﺧﻠﻬﺎ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎت إذا
ﺳﻮف ﺗﻜﻮن ﻗﯿﻤﺔ ) ( arr.lengthﻫﻲ ) ( 3أي اﻟﺸﺮط ﺳﻮف ﯾﻜﻮن ) ( i < 3اﺑﺘﺪاءا ﻣﻦ ) ( 0ﻃﺒﻌﺎ .أي
ان ﻫﺬه اﻟﺤﻠﻘﺔ ﺳﻮف ﺗﺴﺘﻤﺮ ﺑﺎﻟﺘﻜﺮار ﺛﻼﺛﺔ ﻣﺮات " أي اﻟﺪﺧﻮل ﺑﺪاﺧﻠﻬﺎ وﺗﻨﻔﯿﺬ ﻣﺎ ﺑﺪاﺧﻠﻬﺎ ﺛﻼﺛﺔ ﻣﺮات " .
ﻻﺗﻨﺰﻋﺞ ﻻﻧﻲ وﺿﻌﺖ داﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ) ( var iﻓﺄﻧﺎ ﻫﻨﺎ ﻓﻘﻂ ﺑﺪﻻ ﻣﻦ أن أﻋﺮف اﻟﻤﺘﻐﯿﺮ ) ( iﻓﻲ ﺑﺪاﯾﺔ
اﻟﺒﺮﻧﺎﻣﺠﻲ ﻋﺮﻓﺘﻪ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار .ﻃﺒﻌﺎ ﺗﺴﺘﻄﯿﻊ ان ﺗﻌﺮﻓﻪ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ أو ﺗﻌﺮﻓﻪ داﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار
ﻛﻤﺎ ﺗﺸﺎء " ﻓﻘﻂ أﺣﺒﺒﺖ أن ارﯾﻚ ﻋﺪة ﻃﺮق ﻟﺘﻌﺮﯾﻔﻪ ﻟﯿﺲ ﻋﺒﺜﺎ وﻟﻜﻦ ﻣﻦ ﺑﺎب اﻟﻌﻠﻢ ﺑﺎﻟﺸﻲء " .
ﻫﻨﺎ دﺧﻠﻨﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ وﻗﯿﻤﺔ ) ( iﻫﻲ ) ( 0ﺛﻢ دﺧﻠﻨﺎ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ وﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( j
وﺟﻌﻠﻨﺎه ﯾﺒﺪأ ﻣﻦ ) ( 0ووﺿﻌﻨﺎ ﺷﺮط ال ) ( jﻫﻮ ) . ( j<arr[i].lengthوﺑﻤﺎ ان ﻗﯿﻤﺔ ) ( iﻫﻲ ) ( 0
إذا اﻟﺸﺮط ﺳﻮف ﯾﻜﻮن ) ( arr[0].lengthﻣﺎذا ﺗﻌﻨﻲ ﻫﺬه اﻟﺠﻤﻠﻪ ؟
ﺗﻌﻨﻲ ﻣﺎذا ﯾﺤﺘﻮي اﻟﻤﻮﻗﻊ ) ( 0ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ وﻃﺒﻌﺎ ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ أرﺑﻌﺔ
ﻋﻨﺎﺻﺮ ..أي ﻛﺄﻧﻨﺎ ﻧﻘﻮل ﺑﻬﺬه اﻟﺠﻤﻠﺔ " ﻛﻢ ﺗﺤﺘﻮي اﻟﻤﺼﻔﻮﻓﺔ ﻋﻠﻰ ﻋﻨﺎﺻﺮ ﺑﺪاﺧﻠﻬﺎ ﻓﻲ اﻟﻤﻮﻗﻊ ) ( 0ﻣﻦ
اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ " ...
وﺑﻤﺎ أﻧﻬﺎ ﺗﺤﺘﻮي ﻋﻠﻰ أرﺑﻌﺔ ﻋﻨﺎﺻﺮ ،إذا ﻫﻨﺎ ﺗﺮﺟﻤﺔ ) ( arr[0].lengthﺗﻌﻨﻲ ) ( 4إذا اﻟﺸﺮط ﻫﻮ
) ( j<4إذا ﺳﻮف ﻧﻨﻔﺬ ﻣﺎ ﺑﺪاﺧﻞ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ أرﺑﻌﺔ ﻣﺮات إﺑﺘﺪاءا ﻣﻦ ) ( 0واﻧﺘﻬﺎءا ﺑـ ) ( 3وﺳﻨﺒﻘﻰ
ﻣﺴﺘﻤﺮﯾﻦ وﻟﻦ ﻧﺨﺮج ﻣﻨﻬﺎ ﺣﺘﻰ ﻧﻨﺘﻬﻲ " أي ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط " .ﻓﺈذا ﺣﺼﻞ ذﻟﻚ ﻧﺨﺮج ﻣﻨﻬﺎ وﻧﻌﻮد ﻣﺮة أﺧﺮى
اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ .إذا ﻟﻨﺪﺧﻞ ﺑﺪاﺧﻠﻬﺎ ...
ﻓﻘﯿﻤﺔ ) ( jﺗﺴﺎوي ) ( 0وﻫﻮ أﻗﻞ ﻣﻦ ) ( 4ﻓﻌﻼ .ﻓﻨﻨﺘﻘﻞ اﻟﻰ أﻣﺮ اﻟﻄﺒﺎﻋﺔ وﺑﺪاﺧﻠﻪ ) ]( arr[i][j
اﻻن ﻗﯿﻤﺔ ) ( iﻟﺪﯾﻨﺎ ﻫﻲ ) ( 0واﻟـ ) ( jاﯾﻀﺎ ) ( 0إذا ) ] ( arr[0][0ﻧﻌﻨﻲ ﺑﺬﻟﻚ اﻟﻤﻮﻗﻊ ) ( 0ﻓﻲ
اﻟﻤﺼﻔﻮﻓﺔ واﻟﻤﻮﻗﻊ ) ( 0ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ ﻓﺎﻟـ ) ( iﻋﺎدة ﺑﺎﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ أي اﻟﺘﻲ ﺗﻀﻢ ﺑﺪاﺧﻠﻬﺎ ﻋﻠﻰ
ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎت أﻣﺎ ) ( jﻓﻬﻲ ﺧﺎﺻﺔ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ أي اﻟﻤﻮﺟﻮدة ﺑﺪاﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ .إذا ﺗﻮﺻﻠﻨﺎ
ﻟﻨﺘﯿﺠﺔ ...
أن ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ ﻫﻲ ﺧﺎﺻﺔ ﺑﺎﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ وﻣﻮاﻗﻌﻬﺎ .
وﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ ﺧﺎﺻﺔ ﺑﺎﻟﻤﺼﻔﻮﻓﺎت اﻟﺪاﺧﻠﯿﺔ وﻣﻮاﻗﻌﻬﺎ " أي اﻟﻤﺼﻔﻮﻓﺎت اﻟﺘﻲ ﺑﺪاﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ
".
اﻻن ﻟﺪﯾﻨﺎ ) ] ( arr[0][0اذا ﯾﺠﺐ اﻟﺬﻫﺎب اﻟﻰ اﻟﻤﻮﻗﻊ ) ( 0ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ ) ( 0ﻓﻲ
اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻮﻗﻊ ) (0ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻓﻬﻨﺎ ﯾﻄﺒﻊ اﻟﺮﻗﻢ ) ( 1ﻓﻨﻌﻮد ﻣﺮة أﺧﺮى
اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ وﻗﯿﻤﺔ ) ( jأﺻﺒﺤﺖ ) " ( 1أي ﺑﻌﺪ اﻟﺰﯾﺎدة " ﻓﯿﺴﺄﻟﻨﺎ اﻟﺸﺮط ﻫﻞ ) ( 1أﻗﻞ ﻣﻦ
) ( arr[0].lengthأي ﻫﻞ ) ( 1أﻗﻞ ﻣﻦ ) ( 0ﻃﺒﻌﺎ ﯾﺘﺤﻘﻖ اﻟﺸﺮط اذا ﺳﻮف ﯾﺪﺧﻞ اﻟﻰ اﻟﺤﻠﻘﺔ ﻓﯿﻄﺒﻊ
) ] ( arr[0][1وﺗﻌﻨﻲ ذﻟﻚ اﻃﺒﻊ ﻣﺎ ﯾﺤﻮﯾﻪ اﻟﻤﻮﻗﻊ ) ( 0ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ ) ( 1ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ
اﻟﺪاﺧﻠﯿﺔ وﺑﺎﻟﺘﺎﻟﻲ ﺳﻮف ﯾﻄﺒﻊ اﻟﺮﻗﻢ ) ( 3وﺑﻌﺪ ذﻟﻚ ﯾﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ وﺗﻜﻮن ﻗﯿﻤﺔ ) ( j
أﺻﺒﺤﺖ ) ( 2ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط ﻻن ) ( 2أﻗﻞ ﻣﻦ ) ( 4ﻓﯿﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( arr[0][2واﻟﺘﻲ ﺗﻌﻨﻲ اﻟﻤﻮﻗﻊ ) ( 0
ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ ) ( 3ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ ،ﻓﯿﺮﺟﻊ ﻣﺮة أﺧﺮى اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ وﻗﺪ
أﺻﺒﺤﺖ ) ( jﺗﺴﺎوي ) ( 3ﺑﻌﺪ اﻟﺰﯾﺎدة ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط ﻓﻨﺪﺧﻞ اﻟﺤﻠﻘﺔ ﻓﯿﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( arr[0][3واﻟﺘﻲ
ﺗﻌﻨﻲ ..
٤٢
اﻟﻤﻮﻗﻊ ) ( 0ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ ) ( 3ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ .أي أﻧﻪ ﺳﯿﻄﺒﻊ اﻟﺮﻗﻢ ) . ( 5ﻓﻨﻌﻮد
ﻣﺮة أﺧﺮى اﻟﻰ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ وﺗﻜﻮن ﻗﯿﻤﺔ ) ( jأﺻﺒﺤﺖ ) ( 4ﺑﻌﺪ اﻟﺰﯾﺎدة ﻓﯿﻔﺸﻞ اﻟﺸﺮط ﻻن ) ( 4ﻟﯿﺴﺖ أﻗﻞ
ﻣﻦ ) . ( 4ﻓﻨﺨﺮج ﻣﻦ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ وﻧﺬﻫﺐ اﻟﻰ أﻣﺮ ﻃﺒﺎﻋﺔ ) > ( <br /أي اﻟﺒﺪء ﺑﺴﻄﺮ ﺟﺪﯾﺪ ...وﻧﻌﻮد
ﻟﺤﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ ،ﻓﺘﺼﺒﺢ ﻗﯿﻤﺔ ) ( iﻫﻲ ) " ( 1أي ﺑﻌﺪ اﻟﺰﯾﺎدة ﻓﻘﺪ ﻛﺎﻧﺖ ) ( 0وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ
اﻟﺪورة اﻻوﻟﻰ أﺻﺒﺤﺖ ) . ( 1ﻓﻨﻔﺤﺺ اﻟﺸﺮط اﻟﺬي ﻫﻮ " ﻫﻞ ) ( 1أﻗﻞ ﻣﻦ ) ( arr.lengthأي ﻫﻞ ﻫﻲ
أﺻﻐﺮ ﻣﻦ ) ... ( 3ﻓﯿﺘﺤﻘﻖ وﻧﺪﺧﻞ اﻟﻰ داﺧﻞ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ ﻓﻨﺒﺪأ ﺑـ ) ( jﺗﺴﺎوي ) ( 0وﻧﻔﺤﺺ اﻟﺸﺮط واﻟﺬي
ﻫﻮ ﻫﻞ ) ( jأﻗﻞ ﻣﻦ ) ( arr[i].lengthواﻟﺬي ﻫﻮ ) ( arr[1].lengthوﺗﻌﻨﻲ ﻃﻮل اﻟﻤﻮﻗﻊ ) ( 1ﻓﻲ
اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ وﺑﺎﻟﺘﺎﻟﻲ ﻓﻬﻮ ) ( 4ﻻن اﻟﻤﻮﻗﻊ رﻗﻢ ) ( 1ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ
ﺑﺪاﺧﻠﻬﺎ أرﺑﻌﺔ ﻋﻨﺎﺻﺮ .ﻓﯿﺼﺒﺢ اﻟﺸﺮط ) ( 0 < 4ﻓﻨﺪﺧﻞ ﺑﺪاﺧﻞ اﻟﺤﻠﻘﺔ ﻓﻨﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( arr[1][0أي ﻗﯿﻤﺔ
اﻟﻤﻮﻗﻊ رﻗﻢ ) ( 1ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ رﻗﻢ ) ( 0ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ أي ﺳﻮف ﯾﻄﺒﻊ اﻟﺮﻗﻢ ) ( 7
ﺛﻢ ﻧﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ وﺗﺼﺒﺢ ) ( jﻗﯿﻤﺘﻬﺎ ) " ( 1أي ﺑﻌﺪ اﻟﺰﯾﺎدة " ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط
ﻓﻨﺪﺧﻞ ﺑﺤﻠﻘﺔ اﻟﺘﻜﺮار ﻓﻨﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( arr[1][1واﻟﺘﻲ ﺗﻌﻨﻲ اﻟﻤﻮﻗﻊ رﻗﻢ ) ( 1ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺮﺋﯿﺴﯿﺔ واﻟﻤﻮﻗﻊ
رﻗﻢ ) ( 1ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺪاﺧﻠﯿﺔ واﻟﺬي ﻫﻮ ) ( 9وﻧﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ ﺑﻌﺪ أن اﺻﺒﺤﺖ
ﻗﯿﻤﺔ ) ( jﻫﻲ ) ( 2ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط ﻓﻨﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( arr[1][2واﻟﺘﻲ ﻫﻲ ) ( 11ﻓﻨﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ
اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﺘﺼﺒﺢ ﻗﯿﻤﺔ ) ( jﺗﺴﺎوي ) ( 3ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط وﻧﺪﺧﻞ ﺑﺪاﺧﻠﻬﺎ ﻓﯿﻄﺒﻊ ) ] ( arr[1][3واﻟﺘﻲ ﻫﻲ
) ( 13ﻓﻨﻌﻮد ﻣﺮة أﺧﺮى ﻟﺤﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ ﻟﺘﺼﺒﺢ ) ( jﻗﯿﻤﺘﻬﺎ ) ( 4ﻓﻼ ﯾﺘﺤﻘﻖ اﻟﺸﺮط " أي ﯾﻔﺸﻞ "
ﻓﻨﺨﺮج ﻣﻦ اﻟﺤﻠﻘﺔ اﻟﺪاﺧﻠﯿﺔ وﻧﺬﻫﺐ اﻟﻰ أﻣﺮ ) > ( <br /أي اﻟﺒﺪء ﺑﺴﻄﺮ ﺟﺪﯾﺪ ،ﺛﻢ ﻧﻌﻮد ﻣﺮة أﺧﺮى اﻟﻰ اﻟﺤﻠﻘﺔ
اﻟﺮﺋﯿﺴﯿﺔ ﻟﺘﺼﺒﺢ ﻗﯿﻤﺔ ) ( iﻫﻲ ) ( 2ﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط ﻓﻨﺪﺧﻞ ﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ﻓﻨﺬﻫﺐ اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار
اﻟﺪاﺧﻠﯿﺔ ﻓﻨﺒﺪأ ﺑـ ) ( jﺗﺴﺎوي ) ( 0وﯾﺼﺒﺢ اﻟﺸﺮط ) ( j < Arr[2].lengthﻓﯿﺘﺤﻘﻖ اﻟﺸﺮط ﻟﺪﯾﻨﺎ ﻓﻨﺪﺧﻞ اﻟﻰ
ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ ﻓﻨﻄﺒﻊ ﻗﯿﻤﺔ ) ] ( Arr[2][0واﻟﺘﻰ ﻫﻲ ) ( 15وﻫﻜﺬا ﺗﺴﺘﻤﺮ ﻣﻊ ﺑﻘﺎء ﻗﯿﻤﺔ ) ( iﺛﺎﺑﺘﺔ
واﻟﺘﻰ ﻫﻲ ) ( 2وﻗﯿﻤﺔ ) ( jاﻟﺘﻰ ﺗﺰﯾﺪ ﺑﺄﺳﺘﻤﺮار ﺣﺘﻰ ﯾﻔﺸﻞ اﻟﺸﺮط ﻓﻨﺨﺮج ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ ﻓﻨﺬﻫﺐ
ﻟﻸﻣﺮ ) > ( <br /أي اﻟﺒﺪء ﻓﻲ ﺳﻄﺮ ﺟﺪﯾﺪ ﺛﻢ ﻧﻌﻮد اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ ﻟﺘﺼﺒﺢ ) ( iﻗﯿﻤﺘﻬﺎ ) " ( 3أي
ﺑﻌﺪ اﻟﺰﯾﺎدة " ﻓﯿﻔﺸﻞ اﻟﺸﺮط ﻓﺎﻟـ ) ( 3ﻟﯿﺴﺖ أﻗﻞ ﻣﻦ ) ( 3وﺑﺎﻟﺘﺎﻟﻲ ﻋﺪم اﻟﺪﺧﻮل ﻟﺘﻨﻔﯿﺬ ﻣﺎﺑﺪاﺧﻞ ﺣﻠﻘﺔ اﻟﺘﻜﺮار
اﻟﺮﺋﺴﯿﺴﺔ " أي ﺑﻤﻌﻨﻰ أﻧﻨﺎ ﻟﻦ ﻧﺪﺧﻞ اﻟﻰ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺪاﺧﻠﯿﺔ " إذا ﻫﻨﺎ ﻧﻜﻮن ﻗﺪ إﻧﺘﻬﯿﻨﺎ ﻣﻦ اﻟﻄﺒﺎﻋﺔ ﻓﻲ ﺣﻠﻘﺎت
اﻟﺘﻜﺮار اﻟﻤﺘﺪاﺧﻠﺔ واﻟﺼﻌﺒﺔ ﺑﺼﺮاﺣﺔ . . .
وﺑﻌﺪ ﺧﺮوﺟﻨﺎ ﻣﻦ ﺣﻠﻘﺔ اﻟﺘﻜﺮار اﻟﺮﺋﯿﺴﯿﺔ ﻧﻐﻠﻖ اﻟﻮﺳﻢ ) > ( </ttوﻫﻜﺬا ﻧﻜﻮن ﻗﺪ أﻧﻬﯿﻨﺎ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺸﺎق ﻋﻠﯿﻨﺎ
وﻋﻠﯿﻚ . .
ﻣﺜﺎل:
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
var arr = [ [2,4] ,
[6] ,
; ] ][8,10,12
)for (i=0 ; i< arr.length ; ++i
{
)for (j=0 ; j< arr[i].length ; ++j
;) " " document.writeln( arr[i] [j] +
;) ">document.writeln( "<br /
}
></script
></head
><body></body
></html
٤٣
ﺗﺤﻠﯿﻞ ﻫﺬا اﻟﻤﺜﺎل ﻧﺘﺮﻛﻪ ﻟﻚ . .وإذا ﻟﻢ ﺗﺴﺘﻄﻊ ﺗﺤﻠﯿﻠﻪ ﺟﯿﺪا ﻓﻼ ﺗﺘﺮدد ﻓﻲ ﻣﺮاﺳﻠﺘﻲ ﻟﻤﺴﺎﻋﺪﺗﻚ . .
ﻣﻼﺣﻈﺔ :
-----------------------------------------------------------------------------
ﻫﻨﺎ ﺗﺴﺘﻄﯿﻊ أﺳﺘﺨﺪام أي ﺷﻜﻞ ﻟﺤﻠﻘﺔ اﻟﺘﻜﺮار ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وﻟﻜﻦ أﻧﺎ أﻓﻀﻞ أن ﺗﺴﺘﺨﺪم اﻟﺸﻜﻞ اﻷول .واﻟﺬي
أﺳﺘﺨﺪﻣﻪ ﻓﻲ ﺑﺮاﻣﺠﻨﺎ اﻟﺴﺎﺑﻘﺔ .ﻓﻬﻮ أﻛﺜﺮ وﺿﻮﺣﺎ ﻟﻚ وﻟﻜﻦ ﻫﺬا رأﯾﻲ اﻟﺸﺨﺼﻲ وﻟﯿﺲ ﺑﺎﻟﻀﺮورة أن ﺗﻌﻤﻞ ﺑﻪ
ﻓﺎﻻﻣﺮ ﻣﺘﺮوك ﻟﻚ .
٤٤
§ : Math Object
وﻫﻲ ﻛﺎﺋﻨﺎت او ﻃﺮق اذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ ﺗﻘﻮم ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ ..وﻃﺮﯾﻘﺔ اﺳﺘﺪﻋﺎﺋﻌﺎ او ﺗﻄﺒﯿﻘﻬﺎ ﺗﻜﻮن ﻋﻠﻰ
اﻟﺼﯿﻐﺔ اﻟﺘﺎﻟﯿﺔ :
اول ﺷﻲء ذﻛﺮ اﺳﻢ ال ) ( Objectﺛﻢ ﻧﻘﻄﺔ ) ( dotﺛﻢ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﯾﻮﺿﻊ ﻣﺎ ﻫﻮ ﻣﺮاد ﺣﺴﺎﺑﻪ ) .. ( 0واﺳﻢ
ال ) ( Objectﻫﻨﺎ ﻫﻮ ) ( Mathﻣﻦ ﻋﺒﺎرة " " mathematical calculationاي اﻟﻄﺮق
اﻟﺤﺴﺎﺑﯿﺔ " اذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ " اذا اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﻪ ﻫﻨﺎ ﻫﻲ :
ﻣﺜﺎل :
)Math.sqrt(9
ﻫﻨﺎ ﻛﺎﻧﻨﺎ ﻧﻘﻮل ﻧﺮﯾﺪ اﻟﺠﺬر اﻟﺘﺮﺑﯿﻌﻲ ﻟﻠﻌﺪد ) ( 9اذا اﻟﺠﻮاب ﺳﻮف ﯾﻜﻮن ) ( 3وﻫﺬا ﻣﺎ ﺳﻮف ﯾﺨﺮﺟﻪ ﻟﻨﺎ
اﻟﺼﯿﻐﺔ اﻟﺴﺎﺑﻘﺔ
ﻣﻼﺣﻈﺔ :
ﯾﺠﺐ ﻫﻨﺎ اﻻﻟﺘﺰام ﺑﺎﻟﺤﺮوف ﻣﻦ ﻛﺒﯿﺮه وﺻﻐﯿﺮه ﻓﺮﻛﺰ ﺣﺮف ال ) ( Mﯾﺎﺗﻲ ﺑﺎل ) ( capital letterاﻣﺎ
اﻟﺒﻘﯿﺔ ﺗﺄﺗﻲ ﻓﻲ ) ( Math ) .... ( small letter
٤٥
ﻣﺜﺎل :
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
;))document.write(Math.sqrt(9
;)">document.write("<br /
;))document.write(Math.max(10,2
;)">document.write("<br /
;))document.write(Math.sin(1.0
></script
></head
><body></body
></html
ﺑﺸﻜﻞ ﻋﺎم ﻫﻜﺬا ﺗﻜﺘﺐ ال ) ( Math Objectﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ..
ﻓﺠﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ اﻻوﻟﻰ ﺳﻮف ﺗﻄﺒﻊ اﻟﺠﺬر اﻟﺘﺮﺑﯿﻌﻲ ﻟﻠﻌﺪد ) ( 9ﺛﻢ وﺿﻌﺖ ال ) > ( <br /ﺑﻤﻔﺮده ﻓﻲ ﺟﻤﻠﺔ
ﻃﺒﺎﻋﺔ ﻟﻜﻲ ﻻ ﯾﺨﺘﻠﻂ ﻋﻠﯿﻚ اﻻﻣﺮ وذﻟﻚ ﻟﻜﻲ ﻧﻨﺰل ﺳﻄﺮا ﺟﺪﯾﺪا ﺛﻢ ﺗﺎﺗﻲ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ اﻟﺜﺎﻟﺜﺔ ﺗﻄﺒﻊ ﻟﻨﺎ اﻟﺮﻗﻢ
اﻻﻛﺒﺮ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ اﻟﺬﯾﻦ وﺿﻌﻨﺎﻫﻤﺎ ﺛﻢ وﺿﻌﻨﺎ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ اﻟﺜﺎﻟﺜﺔ واﻟﺘﻲ ﻫﻲ ﻧﺰول ﺳﻄﺮ ﺟﺪﯾﺪ " ﺑﺪاﯾﺔ ﺳﻄﺮ
ﺟﺪﯾﺪ " ﺛﻢ وﺿﻌﻨﺎ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ اﻟﺮاﺑﻌﺔ واﻟﺘﻲ ﺳﻮف ﺗﻄﺒﻊ ﻟﻨﺎ ﺟﯿﺐ اﻟﺮﻗﻢ واﺣﺪ ...
ﻣﻼﺣﻈﺔ :
ﻟﻮ اردت ان ﺗﻌﻤﻞ ﻣﻘﺎرﻧﻪ ﺑﯿﻦ ﺛﻼﺛﺔ ارﻗﺎم واﻟﺨﺮوج ﺑﺎﻻﻛﺒﺮ وﻗﺘﻬﺎ ﺗﻜﺘﺐ ﻫﻜﺬا :
)Math.max(Math.max(4,5), 6
١
اﻟﺨﻄﻮة اﻻوﻟﻰ
ﻧﻘﺎرن ﺑﯿﻦ
اﻟﺮﻗﻤﯿﻦ ٥و ٦
٤٦
ﻫﻨﺎ ﻛﺎﻧﻨﺎ ﻧﻘﻮل اﺧﺮج اﻟﺮﻗﻢ اﻻﻛﺒﺮ ﻓﻲ ال ) ( Math Objectاﻟﺬي ﻓﻲ اﻟﺪاﺧﻞ اي ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ ) 4و ( 5
وﻣﻦ ﺛﻢ ﻃﺒﻖ ال ) ( Math Objectاﻟﺬي ﻓﻲ اﻟﺨﺎرج وﻫﻮ ﺳﻮف ﯾﻜﻮن ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ ) ( 5اﻟﺬي ﺧﺮج ﻣﻦ ال
) ( Math Objectاﻟﺘﻲ ﻓﻲ اﻟﺪاﺧﻞ وﺑﯿﻦ اﻟﺮﻗﻢ ) ( 6اﻟﺬي ﻓﻲ ال ) ( Math Objectﻓﻲ اﻟﺨﺎرج اي
اﻟﺮﺋﯿﺴﯿﺔ ..
اذا اردﻧﺎ ان ﻧﺨﺮج اﻟﺮﻗﻢ اﻻﻛﺒﺮ ﺑﯿﻦ ارﺑﻌﺔ ارﻗﺎم ﺗﻜﺘﺐ اﻟﺼﯿﻐﺔ ﻫﻜﺬا : -
اي ﻫﻨﺎ ﻧﺎﺧﺬ ﻛﻞ ﻋﻤﻠﯿﺔ ﻋﻠﻰ ﺣﺪى وﻛﺎﻧﻬﺎ ﻟﻮﺣﺪﻫﺎ ... -
))Math.max(Math.max(4,5),Math.max(11,20
٣
ﺗﻤﺎرﯾﻦ إﺿﺎﻓﯿﺔ ﻋﻠﻰ اﻟﺪوال اﻟﺮﯾﺎﺿﯿﺔ : §
اﻟﻮﺻﻒ اﻟﻄﺮﯾﻘﺔ
ﯾﺮﺟﻊ اﻟﺤﺮف اﻟﻤﺤﺪد ﺑﺎﻟـ )(index )charAt(index
ﯾﺮﺟﻊ ﺷﯿﻔﺮة اﻟﺤﺮف اﻟﻤﺤﺪد ﺑﺎﻟـ )(index )charCodeAt(index
ﯾﺪﻣﺞ اﻟﻨﺺ اﻟﻤﺤﺪد ﻓﻲ اﻟـ ) (stringاﻟﻤﺤﺪد ﻗﺒﻞ اﻻﻣﺮ
) (concatﻣﻊ اﻟﻨﺺ اﻟﻤﺤﺪد ﻓﻲ اﻟـ ) (stringاﻟﺬي )concat(string
ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ اي اﻟﺬي ﺑﻌﺪ )(concat
ﯾﺤﻮل اﻻرﻗﺎم اﻟﻤﺤﺪدة ﺑﯿﻦ اﻻﻗﻮاس اﻟﻰ ﻗﯿﻤﺘﻬﺎ اﻟﺤﺮﻓﯿﺔ
fromCharCode(value1,value2
)…,
) indexOf(substring,indexاﻟﺒﺤﺚ ﻋﻦ اﻟﻨﺺ اﻟﻤﺤﺪدة ﻓﻲ ) (substringﻣﻦ ﺑﻌﺪ
اﻟﻤﻮﻗﻊ رﻗﻢ ) (indexﻣﻦ اﻟﻨﺺ اﻟﻤﺤﺪد ﻓﻲ اﻟـ
)(stringاﻟﻤﺤﺪد ﻗﺒﻞ اﻷﻣﺮ.
وﯾﺮﺟﻊ أول ﻣﻮﻗﻊ ﯾﺤﺘﻮي ﻋﻠﻰ أول ﺣﺮف ﻣﻦ اﻟﻨﺺ
اﻟﻤﺤﺪد ﻓﻲ ) (substringﻣﻦ اﻟـ )(string
) lastIndexOf(substring, indexاﻟﺒﺤﺚ ﻋﻦ اﻟﻨﺺ اﻟﻤﺤﺪدة ﻓﻲ ) (substringﻣﻦ ﻗﺒﻞ
اﻟﻤﻮﻗﻊ رﻗﻢ ) (indexﻣﻦ اﻟﻨﺺ اﻟﻤﺤﺪد ﻓﻲ اﻟـ
٤٧
)(stringاﻟﻤﺤﺪد ﻗﺒﻞ اﻷﻣﺮ.
وﯾﺮﺟﻊ أول ﻣﻮﻗﻊ ﯾﺤﺘﻮي ﻋﻠﻰ أول ﺣﺮف ﻣﻦ اﻟﻨﺺ
اﻟﻤﺤﺪد ﻓﻲ ) (substringﻣﻦ اﻟـ )(string
) slice(start,endﯾﺮﺟﻊ اﻟﻨﺺ ﻣﻦ اﻟﻤﻮﻗﻊ ) (startاﻟﻰ ) (endﻣﻦ اﻟـ
) (stringاﻟﻤﺤﺪد ﻗﺒﻞ اﻷﻣﺮ
) split(stringﺗﻘﺴﯿﻢ اﻟﻨﺺ اﻟﻤﺤﺪد ﻓﻲ ) (stringاﻟﻰ ﻣﺠﻤﻮﻋﺔ
ﻛﻠﻤﺎت ﻧﺤﻦ ﻧﺤﺪد ﻛﯿﻔﯿﺘﻬﺎ .
ﻣﺜﺎل :
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
;"var a ="samialr
;) ) " + a.charAt(0اﻃﺒﻊ اﻟﺤﺮف اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﻤﻮﻗﻊ ﺻﻔﺮ >document.write("<p
></script
></head
><body></body
></html
٤٨
§ Date Objectﺧﺎﺻﻪ ﺑﺎﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ :
وﻫﻲ ﻛﺎﺋﻨﺎت ﺧﺎﺻﻪ ﺑﺎﻟﻮﻗﺖ اي ﺗﻘﻮم ﺑﻌﻤﻠﯿﺎت ذات ﻋﻼﻗﻪ ﺑﺎﻟﻮﻗﺖ ﻣﻦ ﺟﻠﺐ ووﺿﻊ .
اﻟﻮﺻﻒ اﻟﻄﺮﯾﻘﺔ
ﯾﻌﻮد ﺑﺎﻻرﻗﺎم ﻣﻦ ١اﻟﻰ ٣١ﺣﺴﺐ اﻟﯿﻮم )(getDate
ﯾﻌﻮد ﺑﺎﻻرﻗﺎم ﻣﻦ ١اﻟﻰ ٣١ﺣﺴﺐ اﻟﯿﻮم )(getUTCDate
ﯾﻌﻮد ﺑﺎﻻرﻗﺎم ﻣﻦ " 0اﻷﺣﺪ " اﻟﻰ " 6اﻟﺴﺒﺖ " )(getDay
ﯾﻌﻮد ﺑﺎﻻرﻗﺎم ﻣﻦ " 0اﻷﺣﺪ " اﻟﻰ " 6اﻟﺴﺒﺖ " )(getUTCDay
ﯾﻌﻮد ﺑﺎﻟﺴﻨﺔ ﻣﻦ أرﺑﻌﺔ أرﻗﺎم )(getFullYear
ﯾﻌﻮد ﺑﺎﻟﺴﻨﺔ ﻣﻦ أرﺑﻌﺔ أرﻗﺎم )(getUTCFullYear
ﯾﻌﻮد ﺑﺎﻟﺴﺎﻋﺔ ﻣﻦ 0اﻟﻰ 23 )(getHours
ﯾﻌﻮد ﺑﺎﻟﺴﺎﻋﺔ ﻣﻦ 0اﻟﻰ 23 )(getUTSHours
ﯾﻌﻮد ﺑﺎﻟﻤﯿﻠﻲ ﺛﺎﻧﯿﺔ ﻣﻦ 0اﻟﻰ 999 )(getMilliseconds
ﯾﻌﻮد ﺑﺎﻟﻤﯿﻠﻲ ﺛﺎﻧﯿﺔ ﻣﻦ 0اﻟﻰ 999 )(getUTCMilliSecond
ﯾﻌﻮد ﺑﺎﻟﺪﻗﯿﻘﺔ ﻣﻦ 0اﻟﻰ 59 )(getMinutes
ﯾﻌﻮد ﺑﺎﻟﺪﻗﯿﻘﺔ ﻣﻦ 0اﻟﻰ 59 )(getUTCMinutes
ﯾﻌﻮد ﺑﺎﻟﺸﻬﺮ ﻣﻦ " 0ﯾﻨﺎﯾﺮ" اﻟﻰ " 11دﯾﺴﻤﺒﺮ" )(getMonth
ﯾﻌﻮد ﺑﺎﻟﺸﻬﺮ ﻣﻦ " 0ﯾﻨﺎﯾﺮ" اﻟﻰ " 11دﯾﺴﻤﺒﺮ" )(getUTCMonth
ﯾﻌﻮد ﺑﺎﻟﺜﺎﻧﯿﺔ ﻣﻦ 0اﻟﻰ 59 )(getSeconds
ﯾﻌﻮد ﺑﺎﻟﺜﺎﻧﯿﺔ ﻣﻦ 0اﻟﻰ 59 )(getUTCSeconds
ﺳﻮف ﻧﺸﺮح ﺑﻌﺾ ﻣﻨﻬﺎ اﺛﻨﺎء اﻟﻤﺜﺎل وﻫﺬا ﻟﻜﻲ ﺗﺼﻠﻚ ﺑﺸﻜﻞ اﻓﻀﻞ وﻣﺎ ﯾﻄﺒﻖ ﻋﻠﻰ اﻟﺒﻌﺾ ﯾﻄﺒﻖ ﻋﻠﻰ
اﻟﺒﻘﯿﺔ ..
)setDate(val
)setUTCDate(val
)setFullYear(y,m,d
)setUTCFullYear(y,m,d
)setHours(h,m,s,ms
)setUTCHours(h,m,s,ms
٤٩
)setMilliSeconds(ms
)setUTCMilliSeconds(ms
)setMinutes(m,s,ms
)setUTCMinutes(m,s,ms
)setMonth(m,d
)setUTCMonth(m,d
)setSeconds(s,ms
)setUTCSeconds(s,ms
)setTime(ms
ﯾﻌﻮد ﺑﺎﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ ﺑﺎﻟﺘﻔﺼﯿﻞ )(toLocaleString
ﯾﻌﻮد ﺑﺎﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ ﺑﺎﻟﺘﻔﺼﯿﻞ )(toUTCString
وﻟﻜﻦ ﻗﺒﻞ ذﻟﻚ ﻟﻨﺄﺧﺬ ﻓﻜﺮة ﺳﺮﯾﻌﺔ ﻋﻦ ﻣﺎﻫﻮ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ اﻟﺘﺎﻟﻲ ) . ( string
ﺻﯿﻐﺘﻪ :
أي ﺗﻌﺮف ﻣﺘﻐﯿﺮ ) ( aوﻧﻀﻊ ﺑﺪاﺧﻠﻪ ﻧﺺ وﻟﻜﻲ ﺗﺨﺒﺮ ان ﻫﺬا ﻧﺺ ﻧﻀﻌﻪ ﺑﯿﻦ ) " ( .
-١أي ﺷﻲ ﯾﺴﻨﺪ ﻟﻠﻤﺘﻐﯿﺮ وﯾﻜﻮن ﺑﯿﻦ ) " ( ﺳﻮف ﻧﺄﺧﺬه ﻋﻠﻰ أﺳﺎس أﻧﻪ ﻧﺺ ﺣﺘﻰ ﻟﻮ ﻛﺎن رﻗﻢ .
ﻣﺜﺎل :
; " var a = " 123
ﻫﺬا ﻋﺒﺎرة ﻋﻦ ﻧﺺ ﻛﯿﻒ ﻋﺮﻓﻨﺎ ذﻟﻚ ﻻن اﻟﺮﻗﻢ ﺟﺎء ﺑﯿﻦ ) " ( ﺣﺘﻰ اﻻﺣﺮف .
-٢اﻟﻌﻼﻣﺎت او اﻟﺮﻣﻮز إذا ﺟﺎﺋﺖ ﻓﻲ ال ) ( stringﺗﻌﺘﺒﺮ ﻧﺺ وأﯾﻀﺎ اﻟﻔﺮاغ ﯾﻌﺘﺒﺮ ﺣﺮف إذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ .
ﻣﺜﺎل :
; " @var a = "ab c12
ﻫﺬى اﻟﻤﺴﺎﻓﺔ ﺗﻌﺘﺒﺮ ﺣﺮف )" @( أي أﻧﻬﺎ ﺗﺄﺧﺬ ﻣﻮﻗﻊ ﻓﻲ ال ) ( Memoryﻫﻮ ﻣﻮﻗﻊ اﻟﺴﺎدس إﺑﺘﺪاﺋﺎ ﻣﻦ
اﻟﺼﻔﺮ .
٥٠
ﺻﯿﻐﺔ ﻛﺘﺎﺑﺘﻬﺎ :
ﺑﻤﺎ أﻧﻨﺎ ﻧﺘﺤﺪث ﻋﻦ ﻃﺮق ﺗﻄﺒﻖ ﻋﻠﻰ اﻟﻜﺎﺋﻨﺎت اﻟﻨﺼﯿﺔ إذا ﯾﺠﺐ أن ﻧﻜﻮن ﻟﺪﯾﻨﺎ ﻣﺘﻐﯿﺮ ﻧﺼﻲ أي ) ( string
ﻟﻨﺠﺮي ﻋﻠﯿﻪ ﻣﺎﻧﺮﯾﺪ ﻣﻦ اﻟﻄﺮق ﺳﺎﻟﻔﺔ اﻟﺬﻛﺮ ﻓﻲ اﻟﺠﺪول إذا :
ﻣﺜﺎل :
) ذﻛﺮ اﻟﻔﻬﺮس أو اﻟﻤﺘﻐﯿﺮ أو اﻟﻨﺺ أو اﻟﻘﯿﻤﺔ ( أﺳﻢ اﻟﻄﺮﯾﻘﺔ .أﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ) .( string
)a . substring(0,4
أﺧﺒﺮﻧﺎه أﻧﻨﺎ ﻧﺮﯾﺪ أن ﯾﻄﺒﻊ ﻟﻨﺎ أﺣﺮف ﻣﻦ اﻟﻤﻮﻗﻊ ﺻﻔﺮ ﻣﻦ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ) ( aﺑﻄﻮل ) ( 4أي أﻃﺒﻊ
اﻟﺤﺮوف ﻓﻲ اﻟﻤﻮﻗﻊ ) 0و 1و 2و ( 3إذا ﺳﻮف ﯾﻄﺒﻊ ﺧﻤﺴﺔ أﺣﺮف ...وﻫﻲ ) .( Java
)a . toUpperCase(0,4
وﻓﻲ ﻫﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﯾﻄﺒﻊ ﻟﻨﺎ ﻛﻠﻤﺔ ) ( javascriptوﻟﻜﻦ ﺑﻌﺪ ﺗﺤﻮﯾﻞ اﺣﺮﻓﻬﺎ اﻟﻰ اﻷﺣﺮف اﻻﻧﺠﻠﯿﺰﯾﺔ
اﻟﻜﺒﯿﺮه اذا ﺳﻮف ﺗﻈﻬﺮ ﻟﻨﺎ ﺑﻌﺪ ﻃﺒﺎﻋﺘﻬﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ) ( JAVASCRIPT
ﻗﺪ ﺗﺘﺴﺎﺋﻞ ﻟﻤﺎذ ﻟﻢ ﻧﻀﻊ ﺑﻌﺪ ) ( toUpperCaseﻗﯿﻤﺔ ﺑﺪاﺧﻞ اﻟﻘﻮﺳﯿﻦ ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻓﻲ اﻟﺒﺪاﯾﺔ أﺧﺒﺮﺗﻚ
أﻧﻚ ﺗﻀﻊ إذا ﺗﻄﻠﺐ ذﻟﻚ ..وﻟﻜﻦ ﯾﻮﺟﺪ ﻃﺮق ﻻﯾﺴﺘﻠﺰم وﺟﻮد ﻗﯿﻤﺔ أي ﻋﻠﯿﻚ اﻻﻟﺘﺰام ﺑﺎﻟﺠﺪول ..ﻣﻨﻬﺎ ﻣﺜﻼ :
ﻧﺮﯾﺪ ﻓﻘﻂ أن ﻧﺠﻌﻞ اﻟﻨﺺ ﯾﺒﺪو ﺑﺎﻟﺤﺮوف اﻟﻜﺒﯿﺮة إذا ﻛﻞ اﻟﺬي ﻋﻠﯿﻨﺎ ذﻛﺮه أﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ وﻧﻘﻄﺔ ﺛﻢ ﻛﻠﻤﺔ
) ( toUpperCaseإذا ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺑﻤﺎ أﻧﻨﺎ ﻧﺮﯾﺪ أن ﻧﻘﻮل أﻧﻨﺎ ﻧﺮﯾﺪ أن ﻧﺠﻌﻞ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ) ( a
ﯾﻄﺒﻊ وﻟﻜﻦ ﻟﯿﺲ ﺑﻜﻞ أﺣﺮﻓﻪ ﺑﻞ ﺗﺮﯾﺪ أن ﯾﻄﺒﻊ ﻟﻨﺎ أرﺑﻊ أﺣﺮف ﺑﺪاﯾﺔ ﻣﻦ اﻟﻤﻮﻗﻊ ﺻﻔﺮ إذا ﻫﻨﺎ ﻧﺤﻦ ﺑﺤﺎﺟﺔ اﻟﻰ أﺳﻢ
٥١
اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ وﺛﺎﻧﻲ ﺷﻲ ﻣﻦ أي ﻣﻮﻗﻊ ﯾﺒﺪأ اﻟﻌﺪ إذا ﻫﻨﺎ ﯾﺠﺐ أن ﻧﺬﻛﺮ ﺻﻔﺮ ﺛﻢ ﯾﺠﺐ أن ﻧﻜﺘﺐ ﻛﻢ ﻃﻮل اﻟﺬي
ﻧﺮﯾﺪه ﻣﻦ اﻟﻤﻮﻗﻊ ﺻﻔﺮ إذا ﻫﻨﺎ ﻧﺬﻛﺮ ) ( 4أي أرﺑﻊ ﺧﻄﻮات ﺑﺪاﯾﺔ ﻣﻦ اﻟﺼﻔﺮ .
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
;" var a = " samialr
;" var b = " name
;))" + a.charAt (0ﺳﻮف ﯾﻄﺒﻊ اﻟﺤﺮف اﻟﺬي ﻓﻲ اﻟﻤﻮﻗﻊ ﺻﻔﺮ >document.writeln("<p
;) )( " + a.toUpperCaseﺳﻮف ﯾﻄﺒﻊ اﻟﻜﻠﻤﺔ اﻟﺘﻲ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ﺑﺄﺣﺮف ﻛﺒﯿﺮة>document.writeln("<p
;) ) " + b.concat (aدﻣﺞ اﻟﻤﺘﻐﯿﺮﯾﻦ اﻟﻨﺼﯿﯿﻦ ﻟﯿﺼﺒﺢ ﻧﺺ واﺣﺪ >document.writeln("<p
></script
></head
><body></body
></html
ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﻟﻦ ﻧﺤﺘﺎج ﻟﻨﺸﺮﺣﻪ ﻟﻚ ﻻن ﺷﺮح ﻛﻞ اﻣﺮ او ﺧﻄﻮه ﻣﻮﺟﻮد داﺧﻞ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ ﻣﺎ ﻋﻠﯿﻚ ﺳﻮى
ﻗﺮاءة اﻟﻤﺜﺎل وﺗﻄﺒﯿﻘﻪ وﻓﻬﻢ ﻣﺎ ﺗﺤﺘﻮﯾﻪ ﺟﻤﻞ اﻟﻄﺒﺎﻋﺔ ﻣﻦ اواﻣﺮ وﺷﺮح .
ﻛﯿﻔﯿﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ) ( Date objectأي ﻛﺎﺋﻦ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ إذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ .ﻫﻨﺎ ﺗﺨﺼﺺ اﻟﻜﺎﺋﻦ •
) ( Dateووﺿﻊ ﻓﻲ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ وﻣﻦ ﺛﻢ ﺗﻄﺒﯿﻘﻪ ﻋﻠﻰ اﻟﻤﺘﺼﻔﺢ ﺑﺨﺎﺻﯿﺔ أو ﺑﻄﺮﯾﻘﺔ ﻣﻦ اﻟﺨﻮاص اﻟﺘﻲ
ذﻛﺮﻧﺎه ﻓﻲ اﻟﺠﺪول،
-٢ﻧﻄﺒﻖ ﻣﺎﻧﺮﯾﺪه ﻣﻦ اﻟﺨﻮاص أو اﻟﻄﺮق اﻟﻤﺬﻛﻮره ﻓﻲ اﻟﺠﺪول ﻋﻠﻰ ﻫﺬا اﻟﻤﺘﻐﯿﺮ اﻟﺬي وﺿﻌﻨﺎه .
d.getDay() +1
٥٢
ﻣﻼﺣﻈﺔ :
وﺿﻌﻨﺎ ) ( 1+ﻻﻧﻪ ﯾﻄﺒﻊ ﻟﻨﺎ اﻟﯿﻮم ﻣﻦ ٠اﻟﻰ ٦وﻟﻜﻨﻨﺎ ﻧﺮﯾﺪه ﻣﻦ ١اﻟﻰ ٧
وﻟﻜﻦ اﻟﺬي ﻃﺒﻘﻨﺎ ﻋﻠﯿﻪ اي اﻟﻜﺎﺋﻦ ﻫﻮ اﻟﺨﺎص ﺑﺎﻟﻄﺮق ) ( getﻣﺜﻞ ) )( ( getDateاو ) )(( getMonth
وﻫﻜﺬا ...
وﻟﻜﻦ ﻣﺎذا ﻋﻦ ) ( setﻣﺜﻞ ) ) ( setDate(valueاو ) ) ... ( setMonth(m,dاﻟﺦ
وﻫﻜﺬا إذا ﻫﻨﺎ ﻗﺪ ﻧﺤﺘﺎج ان ﻧﺨﺒﺮ اﻟﻤﺘﺼﻔﺢ ﺑﺎن ﯾﺤﻀﺮ ﻟﻨﺎ اﻟﺸﻬﺮ ﻣﻦ اﻟﺠﻬﺎز وﯾﻄﺒﻌﻪ ﻟﻨﺎ ﻣﺜﻞ ) ( getMonth
ﻫﺬا ﯾﻌﻨﻲ أن ﻧﻘﻮل ﻟﻠﻤﺘﺼﻔﺢ أﻃﺒﻊ ﻟﻨﺎ اﻟﺸﻬﺮ ﺑﻌﺒﺎرة أﺧﺮى ) ( getﻛﺄﻧﻨﺎ ﻧﻘﻮل أﺣﻀﺮ اﻟﺸﻬﺮ ﻣﻦ اﻟﺠﻬﺎز
اﻟﺤﺎﺳﻮب وأﻃﺒﻌﻪ ﻟﻨﺎ .
أﻣﺎ ﻟﻮ أردﻧﺎ ﻧﺤﻦ أن ﻧﻀﻊ اﻟﺸﻬﺮ اﻟﺬي ﻧﺮﯾﺪه وﻟﯿﺲ اﻟﻤﻮﺟﻮد ﺑﺠﻬﺎز اﻟﺤﺎﺳﻮب ﻋﻨﺪﻫﺎ ﻧﻜﺘﺐ
) ) ( setMonth(2,1وﺧﺎﺻﯿﺔ أو ﻃﺮﯾﻘﺔ ) ) ( setMonth(m,dﻧﻀﻊ ﺑﺪاﺧﻠﻬﺎ ﻗﯿﻤﺘﯿﻦ ﻛﻤﺎ ﻋﺮﻓﻨﺎﻫﺎ
ﻓﻲ اﻟﺠﺪول ...ﻗﯿﻤﺔ ﻟـ ) ( mوﺗﻌﻨﻲ ﻗﯿﻤﺔ رﻗﻢ اﻟﺸﻬﺮ اﻟﻤﻄﻠﻮب وﻗﯿﻤﺔ ﻟـ ) ( dوﺗﻌﻨﻲ ﻟﻨﺎ اﻟﯿﻮم ﻣﺜﻞ ﻟﻮ وﺿﻌﻨﺎ
) ( 1ﻧﻌﻨﻲ ﺑﻪ ﯾﻮم اﻷﺣﺪ وﺷﺮﯾﻄﺔ أن ﻧﻀﻊ ) ( 1+اﻟﺨﺎﺻﯿﺔ ﻻﻧﻨﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎ أﻧﻪ داﺋﻤﺎ ﻓﻲ اﻟﻜﺎﺋﻦ أو اﻟﺘﺎرﯾﺦ
ﯾﺒﺪأ ﻣﻦ اﻟﺼﻔﺮ و اﻟﺼﻔﺮ ﻫﻮ اﻟﺬي ﯾﻤﺜﻞ ﯾﻮم اﻻﺣﺪ .إذا ﻻﺣﻈﺖ أﻧﻪ ﻋﻨﺪﻣﺎ ﻧﻜﺘﺐ ) ( getﻛﻨﺎ ﻧﻘﻮل أﺣﻀﺮ ﻛﺬا
وأﻃﺒﻌﻪ ﻛﻤﺎ ﻫﻮ وﻋﻨﺪﻣﺎ ﻧﻘﻮل ) ( setﻛﺄﻧﻨﺎ ﻧﻘﻮل ﺿﻊ ﻛﺬا وﻛﺬا وﻟﻜﻦ ﻛﻤﺎ ﻧﺤﺪده ﻟﻚ ﻧﺤﻦ وﻟﯿﺲ ﻛﻤﺎ ﻫﻮ
ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﻬﺎز او اﻟﻮاﻗﻊ اﻻﻓﺘﺮاﺿﻲ .
ﻣﻼﺣﻈﺎت :
-٢ﻫﻨﺎ ﯾﻄﺒﻊ ﻟﻨﺎ داﺋﻤﺎ اﻷرﻗﺎم اﻟﺘﻲ ﺗﻤﺜﻞ اﻻﺷﻬﺮ واﻻﯾﺎم وإذا أردﻧﺎ أن ﯾﻄﺒﻌﻬﺎ ﻟﻨﺎ ﻛﺄﺳﻤﺎء ﻧﻀﻊ اﻻرﻗﺎم ﻓﻲ
) ( switchوﻧﺠﻌﻠﻪ ﯾﻄﺒﻌﻬﺎ ﻟﻨﺎ ﻛﺄﺳﻤﺎء وﺳﻮف ﻧﺄﺧﺬ ﻣﺜﺎل وﻧﺮى ﻻﺣﻘﺎ .
><html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
></script
></head
><body></body
></html
٥٣
: ﻟﻨﺄﺧﺬ ﻣﺜﺎﻻ أﺧﺮ وﻧﺤﻠﻠﻪ
<html >
<head><title><اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ/title>
<script type = "text/javascript">
var c = new Date (2004 , 9 ,29 , 1 , 7, 0 );
document.writeln("<b>Date :</b> + " c + "<br>");
c.setDate(11);
c.setMonth(9);
c.setHours(23);
c.setFullYear(2003);
c.setMinutes(50);
c.setSeconds(55);
document.writeln("<b>Dtae : </b>" + c);
</script>
</head>
<body></body>
</html>
٥٤
ﻟﻨﺤﻠﻞ اﻟﻤﺜﺎل ﺳﻮﯾﺎ وﻧﺮى :
أول ﺷﻲ ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮ ﻫﻮ اﻟﻤﺘﻐﯿﺮ ) ( cووﺿﻌﻨﺎ ﺑﺪاﺧﻠﻪ اﻟﻜﺎﺋﻦ ) ( Dateﺑﺸﻜﻞ Arrayإذا ﺟﺎز اﻟﺘﻌﺒﯿﺮ أي
أﻧﻨﺎ وﺿﻌﻨﺎ ﺑﺪاﺧﻠﻪ ﻗﯿﻢ ﺳﻮف ﺗﺴﻨﺪ إﻟﻰ أﻣﻮر ﺧﺎﺻﺔ ﺑﺎﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ .
وﺑﻬﺬا ﻧﻜﻮن ﻋﺒﺮﻧﺎ ﻋﻦ اﻟﺴﻨﺔ ﺑﺎﻟﻘﯿﻤﺔ اﻻوﻟﻰ وﻫﻲ 2004وﻋﺒﺮﻧﺎ ﻋﻦ اﻟﺸﻬﺮ ﺑﺎﻟﻘﯿﻤﺔ اﻟﺜﺎﻧﯿﺔ وﻫﻲ 9وﻋﻦ اﻟﯿﻮم
ﺑﺎﻟﻘﯿﻤﺔ اﻟﺜﺎﻟﺜﺔ وﻫﻲ 29وﻋﻦ اﻟﺴﺎﻋﺔ ﺑﺎﻟﻘﯿﻤﺔ اﻟﺮاﺑﻌﺔ وﻫﻲ 1وﻋﻦ اﻟﺪﻗﯿﻘﺔ ﺑﺎﻟﻘﯿﻤﺔ اﻟﺨﺎﻣﺴﺔ وﻫﻲ 7وﻋﻦ اﻟﺜﻮاﻧﻲ
ﺑﺎﻟﻘﯿﻤﺔ اﻟﺴﺎدﺳﺔ وﻫﻲ . 0إذا ﻫﻨﺎ ﺳﻮف ﺑﺘﻌﺮف ﻋﻠﻰ اﻟﻘﯿﻢ ﻫﻜﺬا :ﺳﻨﺔ ,ﺷﻬﺮ ,ﯾﻮم ,ﺳﺎﻋﺔ ,دﻗﯿﻘﺔ ,ﺛﺎﻧﯿﺔ .
وﺑﻬﺎ ﻧﻜﻮن ﻗﺪ ﻃﺒﻌﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ( cأي ﺑﻤﺎ ﯾﺤﺘﻮﯾﻪ… وﻣﻨﻬﺎ ﺳﻮف ﯾﻄﺒﻊ ﻟﻨﺎ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ اﻟﺬي ﺣﺪدﻧﺎه ﻓﻲ ﺑﺪاﯾﺔ
ﺑﺮﻧﺎﻣﺠﻨﺎ ﻋﻨﺪ ﺗﻌﺮﯾﻔﻨﺎ ﻟﻠﻤﺘﻐﯿﺮ ) .( cوﻟﻜﻦ ﻟﻨﻘﻞ أﻧﻨﺎ أردﻧﺎ أن ﻧﻐﯿﺮ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﺮﻓﻨﺎﻫﺎ ﻓﻲ ﺑﺪاﯾﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ ﻟﻠﻤﺘﻐﯿﺮ
) ( cأي اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ .ﻟﻨﺮى ﻛﯿﻒ :
;)c.setDate(11
;)c.setMonth(9
;)c.setHours(23
;)c.setFullYear(2003
;)c.setMinuites(50
;)c.setSeconds(55
ﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ ﻧﻜﻮن ﻛﺄﻧﻨﺎ ﻏﯿﺮﻧﺎ ﻛﻞ ﻗﯿﻤﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ) ( cاﻟﻰ ﻫﺬه اﻟﻘﯿﻢ اﻟﺘﻰ ذﻛﺮﻧﺎﻫﺎ وﻫﻮ ﺳﻮف ﯾﻐﯿﺮﻫﺎ
ﻣﺒﺎﺷﺮﺗﺎ ﻓﻼ ﻋﻠﯿﻚ ﺳﻮي ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﻤﺘﻐﯿﺮ ﺛﻢ ﻧﻘﻄﺔ ﺛﻢ ) ( setوﺑﺠﺎﻧﺒﻬﺎ اﻟﺸﻲ اﻟﺬي ﻧﺮﯾﺪ ﺗﻐﯿﺮه ﺳﻮاءا ﯾﻮم
) ( Dateأو ﺳﻨﺔ ) ( FullYearوﻫﻜﺬا .ﺛﻢ اﻻن ﻛﺘﺒﻨﺎ ﺟﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ وأﺧﺒﺮﻧﺎ اﻟﺒﺮﻧﺎﻣﺞ أن ﯾﻄﺒﻊ ﻫﻨﺎ اﻟﻤﺘﻐﯿﺮ
) ( cﻣﺮة أﺧﺮى.
وﻟﻜﻦ ﻫﻨﺎ ﺳﻮف ﯾﻄﺒﻊ اﻟﻤﺘﻐﯿﺮ اﻟﺬى ﺳﻮف ﯾﻌﺒﺮ ﻟﻨﺎ ﻋﻦ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ ﺑﺎﻟﻘﯿﻢ اﻟﺠﺪﯾﺪة اﻟﺘﻲ ﺣﺪدﻧﺎﻫﺎ ﻗﺒﻠﻬﺎ .
-ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻟﻘﺪ وﺿﻌﺖ ﻟﻚ ﻓﻲ ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ ﺷﻜﻠﯿﻦ ﻟﺘﺤﺪﯾﺪ اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ ﺑﻨﻔﺴﻚ واﺣﺪة ﻣﺤﺪدة ﻣﻦ ﺑﺪاﯾﺔ
ﺑﺮﻧﺎﻣﺠﻨﺎ ﻣﻦ ﺧﻼل ﺗﻌﺮﯾﻔﻨﺎ ﻟﻠﻤﺘﻐﯿﺮ واﻟﺜﺎﻧﯿﺔ ﻋﻨﺪﻣﺎ أردﻧﺎ ﺗﻐﯿﯿﺮ اﻟﻘﯿﻢ اﻟﺘﻰ ﯾﺤﺘﻮﯾﻬﺎ اﻟﻤﺘﻐﯿﺮ وﻫﺬا ﻟﻜﻲ ﺗﻌﻢ اﻟﻔﺎﺋﺪة
وﺗﻌﺮف أﺑﻌﺎد اﻟﺨﺎﺻﯿﺔ .
إذا ﻓﻲ اﻟﻨﻬﺎﯾﺔ ﻧﺴﺘﻨﺘﺞ ﺷﻲ واﺣﺪ وﻫﻮ أن ) ( getﻋﻨﺪ إﺳﺘﺨﺪاﻣﻬﺎ ﻓﻲ اﻟﺘﺎرﯾﺦ واﻟﻮﻓﺖ ﺗﺤﺪد ﻟﻨﺎ اﻟﻘﯿﻢ ﻧﻔﺴﻬﺎ ﻣﻦ
اﻟﺠﻬﺎز أﻣﺎ اﻟـ ) ( setﻧﺤﻦ ﻣﻦ ﻧﺤﺪد وﻧﻀﻌﻬﻤﺎ ﯾﺪوﯾﺎ.
٥٥
: ﻣﺜﺎل ﻟﻨﺮى ﻛﯿﻔﯿﺔ ﺗﺤﻮﯾﻞ أرﻗﺎم اﻻﯾﺎم اﻟﻰ اﺳﻢ اﻟﯿﻮم ﻛﺘﺎﺑﺘﺎ
<html dir="rtl">
<head><title><اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ/title>
<script type = "text/javascript">
var d = new Date() ;
switch( d.getDay()+1 )
{
case 1 :
document.writeln(";)" ﯾﻮم اﻷﺣﺪ
break ;
case 2 :
document.writeln(";)" ﯾﻮم اﻷﺛﻨﯿﻦ
break ;
case 3 :
document.writeln(";)" ﯾﻮم اﻟﺜﻼﺛﺎء
break ;
case 4 :
document.writeln(";)" ﯾﻮم اﻷرﺑﻌﺎء
break ;
case 5 :
document.writeln(";)" ﯾﻮم اﻟﺨﻤﯿﺲ
break ;
case 6 :
document.writeln(";)" ﯾﻮم اﻟﺠﻤﻌﺔ
break ;
case 7 :
document.writeln(";)" ﯾﻮم اﻟﺴﺒﺖ
break ;
}
</script>
</head>
<body></body>
</html>
٥٦
اﻟﻤﺜﺎل ﻻ ﯾﺤﺘﺎج اﻟﻰ ﺗﺤﻠﯿﻞ وذﻟﻚ ﻻﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺸﺮح ال ) ( switchﺳﺎﺑﻘﺎ ﻓﻲ اﻟﺪرس اﻟﺨﺎص ﺑﻪ وﻟﻜﻦ ﺳﻮف
اﺿﻊ ﺑﻌﺾ اﻟﻨﻘﺎط اﻟﺮﺋﯿﺴﯿﺔ اﻟﺘﻲ ﺑﻬﺎ ﺗﻠﺨﯿﺺ ﻟﺸﺮح ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ .
-وﺿﻌﻨﺎ ﺑﺪاﺧﻞ اﻟـ ) ( switchﻛﻮد ﺟﻠﺐ اﻟﯿﻮم ﺑﺎﻻرﻗﺎم ) ) ( switch( d.getDay()+1وﺑﻌﺪ ذﻟﻚ
ﺳﻮف ﯾﻘﺎرن اﻟﺮﻗﻢ اﻟﺬي ﺳﻮف ﯾﺴﻨﺪ اﻟﻰ اﻟـ ) ( switchاﻟﻰ ﺟﻤﻞ اﻟﻄﺒﺎﻋﺔ ﻟﻜﻲ ﯾﻄﺒﻊ ﻟﻨﺎ اﻟﯿﻮم ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ
اي ﺑﺎﺣﺮف اﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ وﻛﺎن ﺑﺈﻣﻜﺎﻧﻨﺎ ان ﻧﻌﺮف ﻣﺘﻐﯿﺮ ﻣﻦ ﺛﻢ ﻧﺴﻨﺪ ﻟﻪ ﻛﻮد ﺟﻠﺐ اﻟﯿﻮم ﺑﺎﻻرﻗﺎم وﻣﻦ ﺛﻢ ﻧﻀﻊ
ﻫﺬا اﻟﻤﺘﻐﯿﺮ ﻓﻲ اﻟـ ) ( switchﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ
) switch ( n
{
وﻟﻜﻨﻨﻲ اﺧﺘﺼﺮت اﻟﻄﺮﯾﻖ ووﺿﻌﺖ ﻛﻮد ﺟﻠﺐ اﻟﯿﻮم ﻣﺒﺎﺷﺮة ﻓﻲ اﻟـ ) . ( switch
٥٧
: § ﻣﻌﻠﻮﻣﺎت ﺗﻄﺒﯿﻘﯿﺔ
( forms ) § ﻧﺄﺗﻲ ﻫﻨﺎ اﻟﻰ ذﻛﺮ آﺧﺮﻣﻮﺿﻮﻋﯿﻦ ﻓﻲ اﻟﻜﺘﺎب وﻫﻤﺎ ﻛﯿﻔﯿﺔ اﻟﺘﻌﺎﻣﻞ ﺑﺎﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻣﻊ اﻟﻨﻤﺎذج
( ﻟﻜﻲ ﻻ أﻃﯿﻞ ﻋﻠﯿﻚ ﻋﺰﯾﺰي اﻟﻤﺴﺘﺨﺪم ﻓﺄﻧﺎ أﻋﻠﻢ أنstatus ) واﻟﺸﻲء اﻵﺧﺮ ﻫﻮ ﻇﻬﻮر اﻟﻜﺘﺎﺑﺔ ﺿﻤﻦ ﺷﺮﯾﻂ
اﻟﻜﺘﺎب أﺛﻘﻞ ﻋﻠﯿﻚ ﻣﻦ ﻛﺜﺮ ﻣﺎﯾﺤﺘﻮي ﻋﻠﻰ ﺷﺮح وﻟﻬﺬا ﺳﻮف أذﻛﺮ ﻣﺜﺎل وﻧﺤﻠﻠﻪ ﻣﺒﺎﺷﺮة ﻓﻜﻞ ﺷﻲء ﯾﻔﻬﻢ ﻣﻦ
.. ﺧﻼل اﻟﺘﻄﺒﯿﻖ
: ﻣﺜﺎل
وﻫﻮ ﺗﻌﺒﺌﺔ ﻧﻤﻮذج ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم وﺑﻌﺪ اﻟﺘﻌﺒﺌﺔ ﯾﻀﻐﻂ ﻋﻠﻰ أﯾﻘﻮﻧﺔ ﻣﻮاﻓﻖ ﻓﯿﻄﺒﻊ ﺑﯿﺎﻧﺎﺗﻪ ﻓﻲ ﺻﻔﺤﺔ اﻷﻧﺘﺮﻧﺖ
<html dir="rtl">
<head><title> java script </title>
<script type="text/javascript">
function information()
{
var name=info.name.value;
var job=info.job.value;
var add=info.address.value;
var comm=info.command.value;
document.writeln("<table cellspasing=\"0\"
cellpadding=\"5\" border=\"1\" width=\"80%\"
align=\"center\" dir=\"rtl\" bgcolor=\"#eaeaea\"
bordercolor=\"#000000\">");
document.writeln("<caption><h3>
< اﻟﻤﻌﻠﻮﻣﺎت اﻟﺘﻲ ﺳﺠﻠﺘﻬﺎ ﻟﺪﯾﻨﺎ/h3></caption>");
document.writeln("<tbody>");
document.writeln("<tr><td width=\"30\"><b> اﻷﺳــــﻢ:
</b></td><td>" + name + "</td></tr>");
document.writeln("<tr><td width=\"30\"><b> اﻟﻤﻬﻨـــﺔ
:</b></td><td> " + job + "</td></tr>");
document.writeln("<tr><td width=\"30\">
<b> اﻟﻌﻨــﻮان:</b></td><td> " + add + "</td></tr>");
document.writeln("<tr><td width=\"30\">
<b> ﻣﻼﺣﻈﺎت:</b></td><td> " + comm + "</td></tr>");
document.writeln("</tbody>");
document.writeln("</table>");
}
</script>
</head>
<body >
<form name="info" action="">
<table cellspacing="0" cellpadding="5" border="0" width="80%" align="center">
<tbody>
<tr>
<td> اﻷﺳــــﻢ: </td>
<td><input type="text" name="name" value="" size="31"></td>
</tr>
<tr>
<td> اﻟﻌﻨـــﻮان:</td>
<td> <input type="text" name="address" value="" size="45"></td>
</tr>
<tr>
<td> اﻟﻤﻬﻨـــﺔ:</td>
<td><input type="text" name="job" value="" size="20"></td>
</tr>
<tr>
<td> ﻣﻼﺣﻈـﺎت:</td>
<td><textarea name="command" rows="4" cols="50"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
</br>
<input type="button" name="show" value=""اﻋﺮض
onclick="information()"><input type="reset" name="del" value="> "ﻣﺴﺢ
</td>
</tr>
</tbody> </table></body></html>
58
٥٨
ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﻻ ﺗﻨﺰﻋﺞ ﻣﻦ ﻃﻮل اﻟﻜﻮد ﻓﺎﻟﻜﻮد ﻟﯿﺲ ﺑﻄﻮﻟﻪ ﺑﻞ ﺑﺄواﻣﺮه اﻟﻤﺴﺘﺨﺪﻣﻪ وﺗﻜﻨﯿﻜﻪ وﻣﻦ ﻫﻨﺎ ﻻ ارﯾﺪ
ان اﺣﻠﻞ اﻟﻜﻮد ﻻﻧﻪ ﻻ ﯾﺤﺘﺎج ﺗﺤﻠﯿﻞ ﻓﻼ ﻋﻠﯿﻚ ﻣﻦ رﻫﺒﺔ ﻛﺜﺮﺗﻪ وﻃﻮﻟﻪ وﻣﻦ ﻫﻨﺎ ﺳﻮف اﺷﺮح ﻟﻚ اﻻﻣﻮر اﻟﺘﻲ ﺑﻬﺎ
اﺧﺘﺼﺎراﻟﺸﺮح ﺑﺎﻟﻜﻮد ..
اوﻻ ﻫﺬا اﻟﻜﻮد ﻟﯿﺲ ﺑﻪ اﻣﻮر ﻛﺜﯿﺮه او اواﻣﺮ ﻛﺜﯿﺮا ﺑﻞ ﻫﻮ ﺑﺴﯿﻂ اﻟﻰ اﺑﻌﺪ اﻟﺤﺪود ﻟﻨﻨﻈﺮ ﻛﯿﻒ ذﻟﻚ :
; var name=info.name.value
; var job=info.job.value
; var add=info.address.value
ﻫﻨﺎ ﺳﻮف اﺗﺠﺎوز ﺑﺸﺮﺣﻲ ﻗﻠﯿﻼ ﻋﻦ اﻟﻨﻤﻂ اﻟﺒﺮﻣﺠﻲ اﻟﺒﺤﺖ ﻟﻜﻲ ﺗﺼﻞ اﻟﻤﻌﻠﻮﻣﻪ اﻛﺜﺮ اذا ﺳﻤﺤﺖ ﻟﻲ ..
59
٥٩
ﻫﻨﺎ ﻋﺮﻓﻨﺎ اﻟﻤﺘﻐﯿﺮات ﺑﺎﻟﺸﻜﻞ اﻟﺬي ﻧﻌﺮﻓﻪ ﻣﺜﻞ ) ( nameو ) ( jobو ) ( add
وﺗﺬﻛﺮ أﺧﻲ اﻟﻤﺘﺪرب اﻧﻨﺎ ﻛﻨﺎ ﻧﻌﺮف ﻓﻲ اﻟﻤﺎﺿﻲ ...اي ﻓﻲ اﻟﻤﺼﻔﻮﻓﺎت ﻣﺘﻐﯿﺮ ﻣﺜﻼ ) ( aوﯾﻜﻮن ﻫﻮ ﻋﺒﺎره ﻋﻦ
ﻣﺼﻔﻮﻓﻪ وﻛﺎﻧﺖ ﺗﻜﺘﺐ ﺑﺸﻜﻞ اﻟﺘﺎﻟﻲ :
; var name=info.name.value
اي ﻫﻨﺎ ﻧﻘﻮل ان اﻟﻤﺘﻐﯿﺮ ) ( nameﻫﻮ ﻋﺒﺎره ﻋﻦ ﻗﯿﻤﻪ ﺳﻮف ﺗﻜﻮن ﻣﺪﺧﻠﻪ ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﺣﻘﻞ ﻣﻦ
ﺣﻘﻮل اﻟﻨﻤﻮذج اي ال ) ( formواﻟﺬي ﯾﺤﻤﻞ اﺳﻢ ) ( nameﻟﻜﻲ ﺗﺨﺰن ﺑﺪاﺧﻠﻬﺎ ..
اذا ﻫﻨﺎ ﻧﺄﺗﻲ ﻟﻠﺘﺴﺎؤﻟﻚ ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ...ﻣﺎذا ﯾﻌﻨﻲ اﻟﻜﻮد اﻟﺘﺎﻟﻲ :
; info.name.value
) ( infoوﻧﻌﻨﻲ ﺑﻬﺎ اﺳﻢ اﻟﻨﻤﻮذج اﻟﺬي ﺳﻮف ﯾﺪﺧﻞ ﺑﻪ اﻟﻤﺴﺘﺨﺪم اﻟﻘﯿﻤﻪ واﻟﺬي ﯾﻜﺘﺐ ﻓﻲ ال ) ( form §
ﻓﻜﻤﺎ ﺗﻌﺮف ﻓﻲ ﻟﻐﺔ ) ( htmlاﻟﻨﺼﯿﻪ ﯾﺠﺐ ان ﯾﺤﻤﻞ اﻟﻨﻤﻮذج اﺳﻢ اذا ﻫﻨﺎ ﯾﺠﺐ ان ﻧﻀﻊ ﻧﻔﺲ اﻻﺳﻢ اﻟﺬي
ﺣﺪدﻧﺎه ..ﻟﻠﻤﺘﻐﯿﺮ ) ( nameوﻫﺬا ﻟﻜﻲ ﻧﺨﺒﺮ ان ﻫﺬا اﻟﻤﺘﻐﯿﺮ ﻣﺘﻌﻠﻖ ﺑﺬﻟﻚ اﻟﻨﻤﻮذج ..
§ ) ( nameوﻧﻌﻨﻲ ﺑﻬﺎ اﻻﺳﻢ اﻟﺬي ﺳﻮف ﻧﻀﻌﻪ ﺑﺎﻟﺤﻘﻞ اﻟﺬي ﺳﻮف ﯾﺪﺧﻞ ﺑﻪ اﻟﻤﺴﺘﺨﺪم اﻟﻘﯿﻤﻪ وﻣﻦ ﺛﻢ ﺗﺨﺰن
ﻓﻲ اﻟﻤﺘﻐﯿﺮ ) ( nameواﻟﺘﻲ ﺗﻜﻮن ﻓﻲ اﻟﻨﻤﻮذج ﺑﻬﺬا اﻟﺸﻜﻞ :
وﻫﺬا ﻟﻜﻲ ﻧﻤﯿﺰ ان اﻟﺤﻘﻞ ﻫﺬا اﻟﺬي ﻓﻲ ال ) ( inputواﻟﺬي ﺳﻮف ﯾﺪﺧﻠﻪ اﻟﻤﺴﺘﺨﺪم ﺳﻮف ﯾﺨﺰن ﻓﻲ اﻟﻤﺘﻐﯿﺮ
اﻟﺬي اﺳﻤﻪ ) ( nameاي اﻧﻪ ﺧﺎص ﺑﻪ .
) ( valueوﻧﻌﻨﻲ ﺑﻪ ان ﻫﺬه اﻟﻘﯿﻤﻪ ﺳﻮف ﯾﺪﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻟﺬﻟﻚ ﻫﻲ ﻏﯿﺮ ﻣﻌﻠﻮﻣﻪ اﻟﻰ اﻻن .. §
60
٦٠
وﺑﻬﺬا ﺗﻜﻮن اﻟﺼﯿﻐﺔ ﻟﻠﻤﺘﻐﯿﺮ واﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﻮف ﺗﺨﺰن ﺑﻬﺎ ﻛﺘﺎﻟﻲ :
; var name=info.name.value
إذا ﻋﺮﻓﻨﺎ ﻟﻤﺎذا ﻧﻀﻊ اﻟﻤﺘﻐﯿﺮ وﻧﺴﺎوﯾﻪ ﺑﻬﺬا اﻟﺸﻜﻞ ﻛﻤﺎ ﻓﻲ اﻟﻤﺼﻔﻮﻓﻪ وﻟﻜﻦ ﺑﺎﺧﺘﻼف اﻟﻮﻇﯿﻔﻪ وﻃﺮﯾﻘﺔ اﻟﻜﺘﺎﺑﻪ ..
وﻣﺎ ﯾﻨﻄﺒﻖ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ ) ( nameﯾﻨﻄﺒﻖ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ ) ( jobو ) ( add
§ ﻗﺒﻞ ان ﻧﻨﺘﻘﻞ اﻟﻰ ﺑﻘﯿﺔ اﻟﻜﻮد ﻟﻨﺘﺴﺄل ﻫﻞ اﻟﻤﺴﻤﯿﺎت ﻫﺬه ﺛﺎﺑﺘﻪ وﯾﺠﺐ ذﻛﺮﻫﺎ داﺋﻤﺎ ..؟
اﻟﺠﻮاب :ﻻ
ﻓﻘﺪ ﻧﺄﺗﻲ وﻧﺴﻤﻲ اﻟﻤﺘﻐﯿﺮ وﻧﻜﺘﺒﻪ ﺑﻬﺬا اﻟﺸﻜﻞ .ﻟﻨﻘﻞ ﻣﺜﻼ ﻧﺮﯾﺪ ان ﻧﺴﻤﻲ ﻣﺘﻐﺮ ﺑﺈﺳﻢ ) ( aﻓﺮﺿﺎ .اذا ﻧﻜﺘﺒﻪ ﻛﺘﺎﻟﻲ :
; var a=myform.enter1.value
إذا ﺑﻤﺎ اﻧﻨﺎ ﻏﯿﺮﻧﺎ اﻟﻤﺴﻤﯿﺎت ﯾﺠﺐ ان ﻧﺜﺒﺖ ﺑﻬﺎ ﻋﻠﻰ اﻟﻨﻤﻮذج اي ال ) ( formﻟﻜﻲ ﯾﻌﺮف ان ﻫﺬا اﻟﻤﺘﻐﯿﺮ
ﺧﺎص ﺑﻪ اذا اﻟﺘﻐﯿﺮات ﻛﺘﺎﻟﻲ ﺳﻮف ﺗﺼﺒﺢ ..
; var a=myform.enter1.value
ﻋﻨﺪ ﻛﺘﺎﺑﺘﻨﺎ ﻟﻜﻮد اﻟﻨﻤﻮذج ﻧﺬﻫﺐ و ﻧﻜﺘﺐ اﺳﻢ ال ) ( formﺑﻬﺬا اﻻﺳﻢ وﻫﻮ اﻟﺬي اﺧﺘﺮﻧﺎه ﻣﻦ ﺑﺪاﯾﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ "
" myformﻛﺘﺎﻟﻲ :
واﻟﺤﻘﻞ اﻟﺬي ﺳﻮف ﯾﺪﺧﻞ ﻣﻦ ﺧﻼﻟﻪ اﻟﻤﺴﺘﺨﺪم ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺘﻲ ﺳﻮف ﺗﺨﺰن ﺑﻪ ﺳﻮف ﯾﺄﺧﺬ اﺳﻢ " " enter1
ﻛﺘﺎﻟﻲ :
ﻧﺄﺗﻲ اﻻن اﻟﻰ اﻟﺸﻲء اﻻﺧﺮ وﻫﻮ اﻟﻜﻮد اﻟﺘﺎﻟﻲ وﻣﺎذا ﻧﻌﻨﻲ ﺑﻪ :
اﻟﺘﺴﺎؤل ﻫﻨﺎ ﻟﻤﺎذا وﺿﻌﻨﺎ ﻓﻲ اﻟﺤﻘﻞ اﻟﺨﺎص ﺑﺎل ) ( buttonﻫﺬا اﻟﻜﻮد :
")(onclick="information
61
٦١
ﻋﺰﯾﺰ اﻟﻤﺘﺪرب ﻫﻨﺎ ﺑﻤﺎ اﻧﻪ ﺣﻘﻞ ﺧﺎص ﺑﺎل ) ( buttonاذا ﯾﺠﺐ ﺑﻌﺪ ان ﯾﻀﻐﻂ ﻋﻠﯿﻪ اﻟﻤﺴﺘﺨﺪم ان ﯾﻨﻔﺬ اﻣﺮ
ﻣﻌﯿﻦ اذا ﻫﻨﺎ ﻧﻀﻊ اﺳﻢ اﻟﺪاﻟﻪ اي ال functionاﻟﺬي ﻛﺘﺒﻨﺎ ﺑﺪاﺧﻠﻪ اﻟﻜﻮد ﻟﻜﻲ ﯾﻨﻔﺬ اﻻواﻣﺮ اﻟﺘﻲ ﺑﺪاﺧﻠﻪ ﻟﻬﺬا
وﺿﻌﻨﺎ ﻛﻠﻤﺔ ) ( onclickاي ﻣﺠﺮد ﻣﺎ ﯾﻀﻐﻂ اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ ال ) ( buttonﻧﻔﺬ اﻟﺪاﻟﺔ اي ال )
( functionاﻟﻤﺴﻤﻰ ) ( informationوﻫﻮ اﺳﻢ اﻟﺪاﻟﺔ اﻟﺘﻲ ﺳﻤﯿﻨﺎﻫﺎ ﻓﻲ اول ﺑﺮﻧﺎﻣﺠﻨﺎ ..وﺑﻤﺠﺮد
اﻟﻀﻐﻂ ﻋﻠﯿﻬﺎ ﺳﻮف ﯾﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﻤﻠﻪ وﻫﻮ ﺑﻨﺎء ﺟﺪول وﺑﺪاﺧﻠﻪ اﻟﻘﯿﻢ اﻟﺘﻲ ادﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ..
وﻫﻜﺬا اﻛﻮن ﻗﺪ ﺣﻠﻠﺘﻪ ﻟﻚ اﻟﻰ اﺑﻌﺪ اﻟﺤﺪود وﻛﺄﻧﻨﻲ ﺷﺮﺣﺘﻪ واﻧﺎ ارى اﻧﻨﻲ ﺷﺮﺣﺘﻪ ﻓﺄﻧﺪﻣﺠﺖ ﻓﻲ ﺷﺮﺣﻪ وﻟﻢ اﺷﻌﺮ
ﺑﺬﻟﻚ..
اﻣﺎ ﻟﻤﺎذا ﻟﻢ اﻛﺘﺐ ﺷﺮح ﺑﻘﯿﺔ اﻟﻜﻮد ﻓﻼ ﯾﻮﺟﺪ ﺟﺪﯾﺪ ﺑﻪ ﻓﻜﻠﻪ اواﻣﺮ ) ( document.writelnاي اواﻣﺮ
ﻃﺒﺎﻋﻪ وﺿﻊ ﺑﺪاﺧﻠﻬﺎ ﻛﻮد ال ) ( htmlاﻣﺎ ﻛﯿﻔﯿﺔ ﻛﺘﺎﺑﺔ ﻛﻮد ال ) ( htmlﺑﺪاﺧﻞ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ذﻛﺮﻧﺎه
ﻓﻲ ﺑﺪاﯾﺔ ﻛﺘﺎﺑﻨﺎ ..ﺑﻘﻲ اﻟﻜﻮد اﻟﺬي ﻓﻲ ال ) ( bodyاي ﻓﻲ ﺟﺴﻢ اﻟﺼﻔﺤﺔ ﻫﺬا ﻋﺒﺎره ﻋﻦ ﻛﻮد ) ..( html
اﻣﺎ ﻟﻤﺎذا ﻫﻨﺎ ﻛﺘﺒﻨﺎ ﻛﻮد ﻃﺒﺎﻋﺔ اﻟﺠﺪول ﻓﻲ داﺧﻞ ﻛﻮد اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ واﯾﻀﺎ ﻛﻮد ﻓﻲ اﻟﺠﺴﻢ اﻟﺼﻔﺤﺔ ..؟ §
اﻟﺠﻮاب :
اﻻول اي ﻛﻮد اﻧﺸﺎء اﻟﺠﺪول ﻓﻲ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ ﻗﺼﺪﻧﺎ ﺑﻪ اﻧﻪ ﯾﻨﺸﺌﻪ ﻓﻲ ﺣﺎﻟﺔ ﺗﻨﻔﯿﺬ اﻟﺪاﻟﻪ اي ﺑﻌﺪ ان ﯾﻀﻐﻂ
اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ ال ) ( buttonوﯾﺤﺘﻮي ﺑﺪاﺧﻠﻪ اﻟﻘﯿﻢ اﻟﺘﻲ ﺳﻮف ﯾﻄﺒﻌﻬﺎ وﯾﻈﻬﺮﻫﺎ ﻟﻠﻤﺴﺘﺨﺪم اﻣﺎ اﻟﺠﺪول
اﻻﺧﺮ اﻟﺬي ﻓﻲ ال ) ( bodyﻫﻮ اﻟﺠﺪول اﻟﺨﺎص ﺑﺎﻟﻨﻤﻮذج اي ال ) ( formاﻟﺬي ﺳﻮف ﯾﻈﻬﺮ ﻟﻠﻤﺴﺘﺨﺪم
ﻋﻨﺪ دﺧﻮﻟﻪ ﻟﻠﺼﻔﺤﺔ واﻟﺬي ﺳﻮف ﯾﻤﻸ ﺣﻘﻮﻟﻪ ﻟﺘﻨﺘﻘﻞ اﻟﻰ داﻟﺔ اﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ وﯾﻨﻔﺬﻫﺎ ..
ﻣﻼﺣﻈﺔ :
ﻗﺪ ﺗﺴﺘﺨﺪم ﺷﺮوط ﻣﻌﯿﻨﻪ ﺗﻠﺰم ﺑﻬﺎ ﻣﻌﺒﺊ اﻟﻔﻮرم ﺑﺎﺳﺘﺨﺪام اﺣﺮف او رﻣﻮز ﻣﻌﯿﻨﻪ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ذﻛﺮ رﻣﺰ اﻟـ )
@ ( ﻓﻲ ﺗﻌﺒﺌﺔ اﻟﻤﺴﺘﺨﺪم ﺧﺎﻧﺔ اﻟﺒﺮﯾﺪ اﻻﻟﻜﺘﺮوﻧﻲ ﻟﻠﺘﺄﻛﺪ اﻧﻪ وﺿﻊ ﺑﺮﯾﺪ اﻟﻜﺘﺮوﻧﻲ وﻏﯿﺮﻫﺎ ﻣﻦ اﻟﺸﺮوط اﻟﺘﻲ
أﺗﺮﻛﻬﺎ ﻟﻚ ﻟﺘﻘﻮم ﺑﻬﺎ ﺑﻨﻔﺴﻚ ﻟﻜﻲ ﻻ ﯾﻜﻮن ﻛﻞ ﺷﻲء ﺟﺎﻫﺰ داﺋﻤﺎ وﻟﻜﻦ ﺳﻮف أﻟﻤﺢ ﻟﻚ ﻛﯿﻔﯿﺔ ﻋﻤﻠﻬﺎ أﻻ ﯾﻤﻜﻨﻚ ﻋﻤﻞ
داﻟﻪ اي functionﺗﻘﻮم ﺑﻔﺤﺺ ﺧﺎﻧﺔ ﻣﻌﯿﻨﻪ ﻣﺜﻼ ﺗﻔﺤﺼﻬﺎ ﺑﺠﻤﻠﺔ ifﺑﺪاﺧﻞ functionوﯾﺘﻢ اﺳﺘﺪﻋﺎء ال
functionﻋﻨﺪ ﺗﻌﺒﺌﺔ اﻟﻤﺴﺘﺨﺪم ﺧﺎﻧﺔ ﻣﻌﯿﻨﻪ ﻣﺜﻞ ﺧﺎﻧﺔ اﻟﺒﺮﯾﺪ ﻣﺜﻼ .
واﻟﻤﺜﺎل اﻵﺧﺮ ﯾﺘﺤﺪث ﻋﻦ ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ﺷﺮﯾﻂ ) ( statusواﻟﺬي ﯾﻌﺘﺒﺮ ﻣﻦ اﻟﻜﺎﺋﻦ window §
ﺗﻤﺜﻠﻪ ﻫﺬه اﻟﺼﻮرة :
62
٦٢
ﻓﺈذا أردت ﻋﺰﯾﺰي اﻟﻤﺘﺪرب أن ﺗﺬﻛﺮ أي ﺟﻤﻠﺔ ﻣﻌﯿﻨﺔ ﻓﺘﻈﻬﺮ ﻓﻲ ﺷﺮﯾﻂ ) ( statusﺗﺴﺘﻄﯿﻊ ذﻟﻚ ﻣﻦ ﺧﻼل
اﻻﻣﺮ :
أﻣﺎ إذا ﻛﻨﺖ ﺗﺮﯾﺪ أن ﯾﻈﻬﺮ ﻓﻲ ﺷﺮﯾﻂ ) ( statusﻣﺘﻐﯿﺮ ﻛﺄن ﯾﻈﻬﺮ ﻣﺜﻼ أﺳﻢ زاﺋﺮ ﻣﻮﻗﻌﻚ ﻓﯿﻜﺘﺐ ﺑﻬﺬا اﻟﺸﻜﻞ :
; window.status = name
وﻟﻮ أردت أن ﺗﺬﻛﺮ ﻓﻲ ﺷﺮﯾﻂ ) ( statusﺟﻤﻠﺔ وﻣﻦ ﺛﻢ ﻣﺘﻐﯿﺮ ﻓﺘﻜﻮن اﻟﺼﯿﻎ ﻛﻤﺎ ﯾﻠﻲ :
-١
; " أﻫﻼ ﺑﻚ ﯾﺎ " window.status = name
.
-٢
; " nameﺷﺮﻓﺖ ﻣﻮﻗﻌﻨﺎ " = window.status
ﻣﺜﺎل :
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; " أﻫﻼ ﺑﻚ ﻓﻲ ﻣﻮﻗﻌﻨﺎ " = window.status
></script
></head
><body></body
></html
63
٦٣
ﻻﯾﺤﺘﺎج اﻟﻰ ﺗﺤﻠﯿﻞ ﻓﺄﻧﺖ أﻋﻠﻢ ﺑﻪ .وﻟﻜﻦ ﻟﻨﻔﺮض ان ﻟﺪﯾﻨﺎ ﺑﻌﺾ اﻟﺠﻤﻞ اﻟﻤﻮﺟﻮده ﻓﻲ اﻟﻤﺼﻔﻮﻓﻪ وﻧﺮﯾﺪ ﻋﺮﺿﻬﺎ
ﻓﻲ ال statusاي ﯾﻌﺮض ﻟﻨﺎ ﺟﻤﻞ ﻣﺘﻐﯿﺮة ﺑﺎﺳﺘﻤﺮار ...اﺗﺮﻛﻪ ﻟﻚ ﻟﺘﻔﻜﺮ ﺑﻪ وﻟﻜﻦ أﻟﻤﺢ ﻟﻚ ﻟﺒﻌﺾ
اﻻﺳﺘﺨﺪاﻣﺎت ﻟﺘﻨﻔﯿﺬ ذﻟﻚ ..اوﻻ ﻧﺤﺘﺎج اﻟﻰ ﺗﻌﺮﯾﻒ ﻣﺼﻔﻮﻓﺔ Arrayواﯾﻀﺎ اﻟﻰ ﺟﻤﻠﺔ forواﻟﺒﻘﯿﺔ ﻋﻠﯿﻚ .
ﻟﻨﺄﺧﺬ اﯾﻀﺎ ﺑﻌﺾ ﻣﻦ اﻟﻜﺎﺋﻦ windowﻛﺄﻣﺜﻠﻪ وﺳﻮف اﺗﺮك ﻟﻚ ﺗﺤﻠﯿﻠﻬﺎ وﻟﻜﻦ ﺳﻮف اﺿﻊ ﺑﻌﺾ §
اﻟﺘﻌﻠﯿﻘﺎت اﻟﺘﻲ ﺳﻮف ﺗﺴﺎﻋﺪك ﻋﻠﻰ ﺗﺤﻠﯿﻞ ﻛﻞ ﻣﺜﺎل وﻟﻦ اﺿﻊ ﻟﻚ ﺻﻮرا ﻟﻬﺎ ﻟﻜﻲ ﺗﻨﻔﺬﻫﺎ اﻧﺖ ﻓﻲ ﻧﻔﺴﻚ
وﺗﺘﺨﯿﻠﻬﺎ ..
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
window.open ("www.freewebs.com", "new_web", " toolbar = no ,
location = no , directories = no , status = no , menubar= no , scrollbars
; ) " = no , resizable = no , copyhistory = yes , width = 400 , height = 400
></script
></head
><body></body
></html
ﯾﻘﻮم ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ او اﻟﻜﻮد ﺑﻔﺘﺢ ﺻﻔﺤﺔ ﺟﺪﯾﺪه ﺑﻤﺠﺮد دﺧﻮل اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ اﻟﺼﻔﺤﺔ اﻟﺘﻲ ﺑﻬﺎ ﻫﺬا اﻟﻜﻮد اﻣﺎ ﻣﺎ
ﯾﺤﺘﻮي ﺗﻼﺣﻆ اﻧﻪ ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﻜﺎﺋﻦ windowوﺑﺪاﺧﻠﻪ اﺳﻢ اﻟﻤﻮﻗﻊ اﻟﺬي ﺳﻮف ﯾﻔﺘﺤﻪ ﻟﻠﻤﺴﺘﺨﺪم اﻣﺎ ﺑﻘﯿﺔ
اﻻواﻣﺮ ﻫﻲ ﺧﺼﺎﺋﺺ ﺻﻔﺤﺔ اﻻﻛﺴﺒﻠﻮرر ﻣﻦ وﺟﻮد toolbarاو ﻋﺪﻣﻪ ﻣﻦ ﺳﻤﺎح ﻟﻠﻤﺴﺘﺨﺪم ﺑﺎﻟﺘﺤﻜﻢ ﻓﻲ ﺣﺠﻢ
اﻟﺼﻔﺤﺔ اﻟﺘﻲ ﺳﻮف ﺗﻔﺘﺢ ﻟﻪ ﺑﺎﻻﺿﺎﻓﻪ اﻟﻰ ﻃﻮل وﻋﺮض اﻟﺼﻔﺤﺔ اﻟﺘﻲ ﺗﺮﯾﺪ ان ﺗﻔﺘﺢ ﻟﻠﻤﺴﺘﺨﺪم ...اﻟﺦ ﺟﺮب ان
ﺗﻐﯿﺮ ﺑﯿﻦ ال yesوال noواﻧﻈﺮ ﻣﺎذا ﺳﻮف ﯾﺤﺪث ﻓﺎﻟﻤﻌﻠﻮﻣﻪ ﺗﺼﻠﻚ ﺑﺎﻟﺘﻄﺒﯿﻖ ..
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
) (location.reload
></script
></head
><body></body
></html
ﯾﻘﻮم اﻟﻜﺎﺋﻦ reloadﻣﻦ ﺧﻼل اﻻﻣﺮ ) ( location.reloadﺑﺈﻋﺎدة ﺗﺤﻤﯿﻞ اﻟﺼﻔﺤﺔ اي ﻋﻤﻠﯿﺔ refresh
ﻟﻠﺼﻔﺤﺔ .
ﻣﻼﺣﻈﺔ:
ﯾﻔﻀﻞ إﺳﺘﺨﺪام أﻣﺮ breakأو وﺿﻊ اﻟـ ) ( location.reloadﺿﻤﻦ ﺗﻜﻨﯿﻚ ﻣﻌﯿﻦ ﻣﻦ داﻟﺔ أو ﺣﻠﻘﺔ
ﺗﻜﺮار ﻟﻜﻲ ﻻ ﯾﺪوم اﻟـ refreshاﻟﻰ ﻣﺎ ﻻ ﻧﻬﺎﯾﺔ وﺑﺎﻟﺘﺎﻟﻲ ﻻ ﺗﺴﺘﻄﯿﻊ إﻏﻼق اﻟﺼﻔﺤﺔ
> <html
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
) (window.print
></script
></head
><body></body
></html
64
٦٤
ﯾﻘﻮم ﻫﺬا اﻟﻜﻮد ﺑﻄﺒﺎﻋﺔ اﻟﺼﻔﺤﺔ اﻟﺘﻲ ﯾﻮﺿﻊ ﺑﻬﺎ اﻟﻜﺎﺋﻦ ) ( window.printاي ﺗﺸﻐﯿﻞ ﺧﺎﺻﯿﺔ اﻟﻄﺒﺎﻋﺔ ﻓﻲ
اﻟﺠﻬﺎز ..ﻟﺘﻘﻮم اﻟﻄﺎﺑﻌﺔ ﺑﻄﺒﺎﻋﺔ اﻟﺼﻔﺤﺔ ﺑﻤﻌﻨﻰ ﺑﺪﻻ ﻣﻦ ان ﯾﺬﻫﺐ اﻟﻤﺴﺘﺨﺪم اﻟﻰ fileوﻣﻦ ﺛﻢ ﯾﺨﺘﺎر printﻫﺬا
اﻻﻣﺮ ﯾﻘﻮم ﺗﻠﻘﺎﺋﯿﺎ ﺑﺬﻟﻚ ..ﺑﻤﺠﺮد دﺧﻮل اﻟﺰاﺋﺮ اﻟﻰ اﻟﺼﻔﺤﺔ ﻋﺰﯾﺰي اﻟﻤﺘﺪرب ﺣﺎول ان ﺗﻀﻌﻪ اﻧﺖ ﺿﻤﻦ
buttonﺑﺤﯿﺚ ﻋﻨﺪﻣﺎ ﯾﻀﻐﻂ اﻟﻤﺴﺘﺨﺪم ﻋﻠﯿﻬﺎ ﺗﻘﻮم ﺑﻄﺒﺎﻋﺔ اﻟﺼﻔﺤﺔ ..ﻟﯿﺴﺖ ﺻﻌﺒﻪ ﺗﺬﻛﺮ اﻧﻪ ﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ
functionووﺿﻊ ﺑﺪاﺧﻠﻪ ﻛﺎﺋﻦ ﻃﺒﺎﻋﺔ اﻟﺼﻔﺤﺔ وﻣﻦ ﺛﻢ اﻟﺬﻫﺎب اﻟﻰ ﻛﻮد اﻻﯾﻘﻮﻧﺔ ﻓﻲ ال HTMLووﺿﻊ
onclickوﻣﺴﺎوﺗﻪ ﺑﺈﺳﻢ ال functionوﺑﻬﺬا ﻧﻘﻮل ﻋﻨﺪﻣﺎ ﯾﻀﻐﻂ ﻧﻔﺬ ﺗﺬﻛﺮ ﻣﺎ ﺷﺮﺣﻨﺎه ﺳﺎﺑﻘﺎ ﻓﻲ اﻟـ form
.
>"<html dir="rtl
></titleاﻟﺠﺎﻓﺎ ﺳﻜﺮﺑﺖ><head><title
>"<script type = "text/javascript
; )">: "+ navigator.appName + "<br /إﺻﺪار ﻣﺘﺼﻔﺤﻚ ﻫﻮ "(document.write
; ) ">document.write (window.screen.availWidth + "<br /
; )">document.write( window.screen.availHeight + "<br /
; )">document.write( window.screen.colorDepth + "<br /
></script
></head
><body></body
></html
ﻫﺬا اﻟﻤﺜﺎل ﻻ ﯾﺤﺘﺎج اﻟﻰ ﺗﺤﻠﯿﻞ ﻓﻬﻮ ﯾﺤﺘﻮي ﻋﻠﻰ ﻛﺎﺋﻨﺎت اﻟﻤﺘﺼﻔﺢ ووﺿﻌﻨﺎﻫﺎ ﻓﻲ ﺟﻤﻞ ﻃﺒﺎﻋﺔ ﻟﻜﻲ ﯾﻄﺒﻊ ﻟﻨﺎ ﻣﺎ
ﺳﻮف ﺗﻘﻮم ﺑﻪ او ﺑﻤﻌﻨﻰ اﺻﺢ ﻣﺎ ﺳﻮف ﯾﺮﺟﻌﻪ ﻟﻨﺎ ﻛﻞ ﻛﺎﺋﻦ وﺳﻮف اﺿﻊ ﺑﻌﺾ اﻟﺸﺮح ﻟﻚ ﻟﻜﻲ ﯾﺴﻬﻞ ﻋﻠﯿﻚ
ﺗﺤﻠﯿﻠﻪ ..
navigator.appNameﻫﺬا اﻟﻜﺎﺋﻦ ﺳﻮف ﯾﻌﻮد ﻟﻨﺎ ﺑﺈﺳﻢ اﻟﻤﺘﺼﻔﺢ ﻟﺪﯾﻨﺎ وﻻﺣﻆ ﻋﻨﺪ وﺿﻌﻪ ﻓﻲ ﺟﻤﻠﺔ §
اﻟﻄﺒﺎﻋﺔ وﺿﻌﻨﺎه ﻛﻤﺘﻐﯿﺮ .
window.screen.availWidthﻫﺬا اﻟﻜﺎﺋﻦ ﯾﻘﻮم ﺑﺎرﺟﺎع ﻋﺮض اﻟﺸﺎﺷﻪ ﻓﻲ ﺟﻬﺎز اﻟﻤﺴﺘﺨﺪم اي §
. RESOLUTION SCREEN
window.screen.availHeightﻫﺬا اﻟﻜﺎﺋﻦ ﯾﻘﻮم ﺑﺎرﺟﺎع ﻃﻮل اﻟﺸﺎﺷﻪ ﻓﻲ ﺟﻬﺎز اﻟﻤﺴﺘﺨﺪم اي §
. RESOLUTION SCREEN
window.screen.colorDepthﻫﺬا اﻟﻜﺎﺋﻦ ﯾﻘﻮم ﺑﺎرﺟﺎع ﻟﻨﺎ ﻣﻘﺪار اﻟﻌﻤﻖ ﻓﻲ اﻷﻟﻮان اﻟﻤﺴﺘﺨﺪﻣﻪ §
ﻓﻲ ﺟﻬﺎز اﻟﻤﺴﺘﺨﺪم أﻟﯿﺲ اﻟﻤﺴﺘﺨﺪم ﯾﺨﺘﺎر ﻓﻲ ﺟﻬﺎزه ﻣﻦ settingsﻓﻲ ﺧﺼﺎﺋﺺ ﻋﺮض اﻟﺸﺎﺷﻪ ال
color qualityﻣﺜﻼ 32 bitاو ... 16 bitاﻟﺦ
65
٦٥