Ccppfrontenduni
Ccppfrontenduni
ﻓﻬﺮﺳﺖ ﻣﻄﺎﻟﺐ
ﺻﻔﺤﻪ
ﻋﻨﻮان
ﻣﻘﺪﻣﻪ 4 ..................................................................................................................................................................................
ﻣﻘﺪﻣﻪ
در اﯾﻦ ﮐﺘﺎب اﺳﺘﺎﻧﺪارد ﮐﺪ ﻧﻮﯾﺴﯽ زﺑﺎن Cو C++ﻣﻌﺮﻓﯽ ﻣﯽﺷﻮد .ﻣﻨﻈﻮر از اﺳﺘﺎﻧﺪارد ﮐﺪ ﻧﻮﯾﺴﯽ اﯾﺠﺎد روﯾﻪاي
ﯾﮑﺴﺎن ﺟﻬﺖ ﻧﻮﺷﺘﻦ ﻣﺘﻦ ﮐﺪ ﻣﯽﺑﺎﺷﺪ ﺑﻪ ﮔﻮﻧﻪاي ﮐﻪ ﻇﺎﻫﺮ ﮐﺪﻫﺎي ﻣﺨﺘﻠﻒ ﻧﻮﺷﺘﻪ ﺷﺪه در ﮔﺮوه ﺑﺮﻧﺎﻧﻪﻧﻮﯾﺴﯽ
ﯾﮑﺴﺎن ﺑﺎﺷﺪ.
ﺑﻪ ﺟﺮات ﻣﯽﺗﻮان ادﻋﺎ ﻧﻤﻮد ﮐﺪي ﮐﻪ اﻓﺮاد ﻣﯽﻧﻮﯾﺴﻨﺪ ﻫﻤﺎﻧﻨﺪ دﺳﺘﺨﻂ اﻓﺮاد ﻣﯽﺑﺎﺷﺪ و ﭘﺮواﺿﺢ اﺳﺖ ﮐﻪ ﮐﺴﯽ
دﺳﺘﺨﻂ ﺧﺮﭼﻨﮓ ﻗﻮرﺑﺎﻏﻪاي را ﻧﻤﯽ ﭘﺴﻨﺪد ﻟﺬا اﻓﺮاد ﻫﻤﻮاره ﺑﻪ دﻧﺒﺎل داﺷﺘﻦ دﺳﺘﺨﻄﯽ زﯾﺒﺎ ﻫﺴﺘﻨﺪ .در اﯾﻦ
راﺳﺘﺎ روشﻫﺎي ﻣﺨﺘﻠﻔﯽ ﺟﻬﺖ رﺳﻢاﻟﺨﻂ وﺟﻮد دارد ﭼﻪ در زﺑﺎن ﻓﺎرﺳﯽ ﭼﻪ در زﺑﺎنﻫﺎي دﯾﮕﺮ ﮐﻪ ﻫﻤﻪ آﻧﻬﺎ
ﺳﻌﯽ ﻣﯽﮐﻨﻨﺪ روﺷﯽ زﯾﺒﺎ را ﺑﺮاي رﺳﻢاﻟﺨﻂ ﻣﻌﺮﻓﯽ ﮐﻨﻨﺪ.
در ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ﻧﯿﺰ ﻫﺪف اﺳﺘﺎﻧﺪارد ﮐﺪ ﻧﻮﯾﺴﯽ ﭼﻨﯿﻦ ﻣﯽﺑﺎﺷﺪ .ﭘﺲ ﻫﻤﺎﻧﻈﻮر ﮐﻪ ﺗﻨﺪﻧﻮﯾﺴﯽ ﺗﺎ ﺣﺪ زﯾﺎدي ﺑﺎﻋﺚ
ﻧﺎﺧﻮاﻧﺎ ﺷﺪن ﻣﯽﺷﻮد در ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ﻧﯿﺰ ﮐﺪ ﻧﻮﯾﺴﯽ ﺳﺮﯾﻊ و ﺑﺪون رﻋﺎﯾﺖ اﺳﺘﺎﻧﺪارﻫﺎ ﺑﺎﻋﺚ ﻣﯽﺷﻮد ﮐﺪي ﺑﻪ
دﺳﺖ آﯾﺪ ﮐﻪ ﺷﺎﯾﺪ ﺑﺮاي ﺧﻮد ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ ﻧﯿﺰ ﺑﻌﺪ از ﻣﺪﺗﯽ ﻗﺎﺑﻞ ﻓﻬﻢ ﻧﺒﺎﺷﺪ و ﯾﺎدآور ﺣﮑﺎﯾﺖ ﻧﻮﯾﺴﻨﺪه ﻧﺎﻣﻪاي
ﺷﻮد ﮐﻪ ﻧﻪ دﯾ ﮕﺮان ﺗﻮاﻧﺴﺘﻨﺪ ﻧﺎﻣﻪ را ﺑﺨﻮاﻧﻨﺪ ﻧﻪ ﺧﻮد او؛ ﭘﺲ ﻫﻤﻮاره ﻧﺎﻣﻪ را ﺑﻪ ﮔﻮﻧﻪاي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﻋﻼوه
ﺑﺮ ﺷﻤﺎ دﯾﮕﺮان ﻧﯿﺰ ﺑﺘﻮاﻧﻨﺪ آن را ﺑﺨﻮاﻧﻨﺪ.
ﺷﺎﯾﺪ ﺑﺘﻮان ﻣﺰاﯾﺎي زﯾﺮ را ﺑﺮاي رﻋﺎﯾﺖ اﺳﺘﺎﻧﺪارد ﮐﺪ ﻧﻮﯾﺴﯽ ذﮐﺮ ﻧﻤﻮد.
اﺳﺘﺎﻧﺪارد ﻣﻌﻤﻮﻻ ﺧﻮب ﻧﯿﺴﺖ ﭼﺮا ﮐﻪ ﻣﻄﺎﺑﻖ اﺳﺘﺎﻧﺪارد ﻣﻦ)ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺲ( ﻧﯿﺴﺖ. .1
اﺳﺘﺎﻧﺪارد ﺧﻼﻗﯿﺖ را از ﺑﯿﻦ ﻣﯽﺑﺮد. .2
اﺳﺘﺎﻧﺪارد دﺳﺖ و ﭘﺎ ﮔﯿﺮ اﺳﺖ و ﺳﺮﻋﺖ ﮐﺎر را ﮐﺎﻫﺶ ﻣﯽدﻫﺪ. .3
اﺳﺘﺎﻧﺪارد ﻣﺎﻧﻨﺪ رﯾﯿﺲ ﺧﺸﮏ و ﺳﺨﺖﮔﯿﺮ اﺳﺖ. .4
5 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
اﻣﺎ ﻋﻠﯿﺮﻏﻢ ﻣﻮارد ﺑﺎﻻ ﺗﺠﺮﺑﻪ ﻧﺸﺎن داده اﺳﺖ ﮐﻪ رﻋﺎﯾﺖ اﺳﺘﺎﻧﺪارد ﻫﻤﻮاره ﺑﺎﻋﺚ ﻧﺘﯿﺠﻪﮔﯿﺮي ﺑﻬﺘﺮ در اﻧﺘﻬﺎي ﮐﺎر
ﺷﺪه اﺳﺖ .ﺑﻪ ﻋﺒﺎرت دﯾﮕﺮ اﮔﺮ ﺷﻤﺎ اﻣﺮوز ﺑﺮاي اوﻟﯿﻦ ﺑﺎر ﺑﺎ اﯾﻦ اﺳﺘﺎﻧﺪارد ﺑﺮﺧﻮرد ﮐﻨﯿﺪ ﻣﺎﻧﻨﺪ ﺧﻮدروﯾﯽ ﻫﺴﺘﯿﺪ
ﮐﻪ ﺗﺎزه از ﺧﻂ ﺗﻮﻟﯿﺪ ﺧﺎرج ﺷﺪه ،اﯾﻦ ﺧﻮدرو ﻣﻤﮑﻦ اﺳﺖ ﺑﺘﻮاﻧﺪ ﺑﺎ ﺳﺮﻋﺖ ﺑﯿﺶ از 200ﮐﯿﻠﻮﻣﺘﺮ در ﺳﺎﻋﺖ ﺣﺮﮐﺖ
ﮐﻨﺪ اﻣﺎ در اﺑﺘﺪاي اﻣﺮ ﻫﯿﭻ ﮐﺎرﺑﺮي ﺑﺎ اﯾﻦ ﺗﻮﺟﯿﻪ ﮐﻪ آبﺑﻨﺪي ﺧﻮدرو ﺑﺎﻋﺚ اﺗﻼف وﻗﺖ در ﻣﺴﯿﺮ اﺳﺖ ﺑﺎ ﺳﺮﻋﺖ
ﺑﺎﻻ ﺷﺮوع ﺑﻪ ﺣﺮﮐﺖ ﻧﻤﯽﮐﻨﺪ و ﻫﻤﻪ ﻫﺰﯾﻨﻪ زﻣﺎن را ﭘﺮداﺧﺖ ﻣﯽﮐﻨﻨﺪ ﺗﺎ ﻋﻤﺮ ﺧﻮدرو را ﺑﺎﻻ ﺑﺒﺮﻧﺪ.
اﺳﺘﺎﻧﺪارد ﻧﯿﺰ ﺑﺮاي اﻓﺮاد ﭼﻨﯿﻦ اﺳﺖ ﺧﺼﻮﺻﺎ در ﻣﺤﯿﻂﻫﺎي ﮔﺮوﻫﯽ ﭘﺲ ﺳﻌﯽ ﻧﮑﻨﯿﺪ ﺧﻮدرو ﺻﻔﺮ ﮐﯿﻠﻮﻣﺘﺮ ﺧﻮد
را ﺑﺎ ﺳﺮﻋﺖ 200ﮐﯿﻠﻮﻣﺘﺮ در ﺳﺎﻋﺖ آزﻣﺎﯾﺶ ﮐﻨﯿﺪ.
ﺑﻨﺎﺑﺮاﯾﻦ آﻧﭽﻪ در اﯾﻦ ﮐﺘﺎب آﻣﺪه ﺑﺎ ﻫﺪف اﻓﺰاﯾﺶ ﮐﺎراﯾﯽ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ و ﻣﺤﺼﻮل اﺳﺖ ﻧﻪ اﯾﺠﺎد روالﻫﺎي ﺑﯿﻬﻮده
ﻟﺬا ﺳﻌﯽ ﮐﻨﯿﺪ آن را رﻋﺎﯾﺖ ﮐﻨﯿﺪ ﻫﺮ ﭼﻨﺪ ﮐﻪ در اﺑﺘﺪاي ﮐﺎر ﺑﺎﻋﺚ ﮐﻨﺪي ﺑﯿﺶ از ﺣﺪ ﮐﺎر ﺷﻤﺎ ﺷﻮد.
در اداﻣﻪ اﺑﺘﺪا درﺑﺎره ﻣﺘﻐﯿﺮﻫﺎي ﺻﺤﺒﺖ ﻣﯽﺷﻮد ،ﺳﭙﺲ ﻗﻮاﻧﯿﻦ ﻧﻮﺷﺘﻦ ﮐﺪ ﺑﺮرﺳﯽ ﻣﯽﺷﻮد .ﭘﺲ از آن در ﺑﺨﺶ
3اﺳﺘﺎﻧﺪارد ﺗﻮﺿﯿﺤﺎت ﺗﺸﺮﯾﺢ ﺷﺪه و ﺑﺎﻻﺧﺮه در ﺑﺨﺶ 5ﻧﮑﺎت ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ﺑﯿﺎن ﺷﺪه اﺳﺖ.
در اﻧﺘﻬﺎ از ﺧﻮاﻧﺪﮔﺎن ﮔﺮاﻣﯽ ﺗﻘﺎﺿﺎ ﻣﯽﺷﻮد ﻧﻈﺮات ﺧﻮد را درﺑﺎره اﯾﻦ ﮐﺘﺎب ﺑﻪ اﯾﻤﯿﻞ [email protected]
ارﺳﺎل ﮐﻨﻨﺪ .ﺑﺪﯾﻬﯽ اﺳﺖ ﻧﻈﺮات ﺷﻤﺎ ﮐﻤﮏ ﺑﺴﯿﺎر زﯾﺎدي در ﺗﮑﻤﯿﻞ اﯾﻦ ﮐﺘﺎب ﺧﻮاﻫﺪ ﻧﻤﻮد .ﭘﯿﺸﺎﭘﯿﺶ از
ﻫﻤﮑﺎري ﺗﻤﺎﻣﯽ ﻋﺰﯾﺰان ﺗﺸﮑﺮ ﻣﯽﺷﻮد.
6 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
1ﻣﺘﻐﯿﺮﻫﺎ
ﻣﺘﻐﯿﺮﻫﺎ ﻗﻠﺐ ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﻣﯽﺑﺎﺷﻨﺪ .ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ ﻫﯿﭻ ﭼﯿﺰ ﺑﻪ اﻧﺪازه رﻋﺎﯾﺖ ﻗﻮاﻧﯿﻦ ﻣﺘﻐﯿﺮﻫﺎ ﻧﻤﯽﺗﻮاﻧﺪ ﺳﺮﻋﺖ و
ﻣﺎﻧﺪﮔﺎري ﺑﺮﻧﺎﻣﻪ را ﺗﻀﻤﯿﻦ ﮐﻨﺪ .ﻟﺬا اﯾﻦ ﺑﺨﺶ را ﺑﺎ ﺣﻮﺻﻠﻪ ﻣﻄﺎﻟﻌﻪ ﮐﻨﯿﺪ.
اوﻟﯿﻦ ﻧﮑﺘﻪ ﻧﺎم ﻣﺘﻐﯿﺮﻫﺎ ﻣﯽﺑﺎﺷﺪ .ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ ﮐﻪ اﮔﺮ در زﻧﺪﮔﯽ روزﻣﺮه ﻧﯿﺰ ﻧﺎم ﻫﺮﺷﯽ ،اﺗﻔﺎق و ...ﻣﺘﻨﺎﺳﺐ ﺑﺎ
آن اﻧﺘﺨﺎب ﻣﯽﺷﺪ ﺧﺼﻮﺻﺎ اﻓﺮاد ،زﻧﺪﮔﯽ ﺑﺴﯿﺎر راﺣﺖ ﺑﻮد و ﭘﯿﺸﺮﻓﺖ ﺑﺸﺮ ﺳﺮﯾﻌﺘﺮ ﻣﯽﺷﺪ ﭼﺮا ﮐﻪ ﺷﻤﺎ ﺑﺎ ﺷﻨﯿﺪن
ﻧﺎم ﻫﺮ ﺷﺨﺺ ﯾﺎ ﻫﺮ اﺗﻔﺎق اﻃﻼﻋﺎت اوﻟﯿﻪ ﻣﻮرد ﻧﯿﺎز را ﺑﻪ دﺳﺖ ﻣﯽآوردﯾﺪ .ﺣﺎل ﮐﻪ در دﻧﯿﺎي واﻗﻌﯽ اﻣﮑﺎن ﭘﺬﯾﺮ
ﻧﺸﺪه اﺳﺖ در دﻧﯿﺎي ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ اﯾﻦ اﻣﺮ را رﻋﺎﯾﺖ ﮐﻨﯿﺪ.
ﺳﻌﯽ ﮐﻨﯿﺪ ﻧﺎم ﻣﺘﻐﯿﺮ ﺣﺘﻤﺎ ﺑﯿﺎﻧﮕﺮ ﮐﺎرﺑﺮد آن ﺑﺎﺷﺪ ﺑﻪ ﻣﺜﺎل زﯾﺮ ﺗﻮﺟﻪ ﮐﻨﯿﺪ.
;int xx = 0
;int yy = xx + 1
در اﯾﻦ ﻣﺜﺎل ﻣﺘﻐﯿﺮﻫﺎي xxو yyﺑﻪ ﻫﯿﭻ وﺟﻪ ﻣﻔﻬﻮم ﻧﻤﯽﺑﺎﺷﻨﺪ .اﻣﺎ در ﻣﺜﺎل ﺑﻌﺪ ﭼﻨﯿﻦ ﻧﻤﯽﺑﺎﺷﺪ.
اﮔﺮ ﻗﺎﻧﻮن 1رﻋﺎﯾﺖ ﺷﻮد آﻧﮕﺎه اﯾﻦ ﻗﺎﻧﻮن ﻣﺎﻧﻨﺪ ﮐﺎرت ﺷﻨﺎﺳﺎﯾﯽ ﺗﺎﺑﻊ اﺳﺖ .ﺷﻤﺎ ﺑﺎ دﯾﺪن ﻣﺘﻐﯿﺮﻫﺎي ﻣﻮرد اﺳﺘﻔﺎده
در ﺗﺎﺑﻊ ﺑﻪ راﺣﺘﯽ ﻣﯽﺗﻮاﻧﯿﺪ ﺗﺎ ﺣﺪ زﯾﺎدي اﻟﮕﻮرﯾﺘﻢ و رﻓﺘﺎر ﺗﺎﺑﻊ را ﺣﺪس ﺑﺰﻧﯿﺪ ﭘﺲ ﺳﻌﯽ ﮐﻨﯿﺪ ﮐﺎرت ﺷﻨﺎﺳﺎﯾﯽ
را در اﺑﺘﺪا ﻧﺸﺎن دﻫﯿﺪ ﻧﻪ در اﻧﺘﻬﺎ.
ﻧﮑﺘﻪ دﯾﮕﺮ اﯾﻨﮑﻪ اﯾﻦ اﻣﺮ ﺑﺎﻋﺚ ﻣﯽﺷﻮد ﺧﻮاﻧﺎﯾﯽ ﮐﺪ ﺷﻤﺎ اﻓﺰاﯾﺶ ﯾﺎﺑﺪ و از ﺗﻌﺮﯾﻒ ﻣﺠﺪد ﻣﺘﻐﯿﺮ ﺧﺼﻮﺻﺎ ﻣﺘﻐﯿﺮﻫﺎي
ﺣﻠﻘﻪ ﺧﻮدداري ﮐﺮده و ﻣﺘﻌﺎﻗﺒﺎ ﺑﺎ ﺧﻄﺎي ﮐﺎﻣﭙﺎﯾﻠﺮ ﻣﻮاﺟﻪ ﻧﺸﻮﯾﺪ.
{
7 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
}
.3ﻧﺎم ﻣﺘﻐﯿﺮ ﺑﺎ ﺣﺮوف ﮐﻮﭼﮏ ﺷﺮوع ﺷﻮد و در ﻣﺘﻐﯿﺮﻫﺎي ﭼﻨﺪ ﮐﻠﻤﻪاي ﺣﺮف اول ﻫﺮ ﮐﻠﻤﻪ ،ﻏﯿﺮ
از ﮐﻠﻤﻪ اول ،ﺑﺎ ﺣﺮوف ﺑﺰرگ ﺑﺎﺷﺪ.1
اﯾﻦ ﻗﺎﻧﻮن اﺑﺘﺪا ﻧﺤﻮه ﻧﺎﻣﮕﺪاري را ﺑﯿﺎن ﻣﯽﮐﻨﺪ ﺛﺎﻧﯿﺎ اﯾﻨﮑﻪ از ﻣﺘﻐﯿﺮﻫﺎي ﭼﻨﺪ ﮐﻠﻤﻪاي ﻫﺮاس ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻨﯿﺪ.
ﻣﻄﻤﺌﻨﺎ ﮐﻠﻤﻪ >ﺑﻨﺰ <CLK 2009ﺑﻪ ﻣﺮاﺗﺐ ﻣﻔﻬﻮمﺗﺮ از >ﺑﻨﺰ< ﻣﯽﺑﺎﺷﺪ.
ﻧﮑﺘﻪ ﻣﻬﻢ در اﯾﻦ راﺳﺘﺎ ﻋﺪم اﺳﺘﻔﺎده از ﮐﺎﮐﺘﺮﻫﺎي ﺛﺎﻧﻮﯾﻪ 2ﻣﯽ ﺑﺎﺷﻨﺪ .ﻣﻌﻤﻮﻻ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﺎن از ﮐﺎراﮐﺘﺮﻫﺎي _ و
__ ﺑﯿﺸﺘﺮ اﺳﺘﻔﺎده ﻣﯽﮐﻨﻨﺪ .ﺗﻮﺻﯿﻪ ﺑﻪ اﺳﺘﻔﺎده ﻧﮑﺮدن از ﮐﺎراﮐﺘﺮﻫﺎﯾﯽ ﻣﺎﻧﻨﺪ _ و __ ﺑﺮاي ﺟﺪا ﮐﺮدن ﮐﻠﻤﺎت دو
دﻟﯿﻞ ﻋﻤﺪه دارد.
.1ﻧﻮﺷﺘﻦ ﻧﺎم ﻣﺘﻐﯿﺮ ﺳﺮﯾﻌﺘﺮ اﻧﺠﺎم ﻣﯽﺷﻮد ﭼﺮا ﮐﻪ ﮐﺎراﮐﺘﺮﻫﺎي _ و __ ﻧﯿﺎز ﺑﻪ ﮔﺮﻓﺘﻦ دو ﮐﻠﯿﺪ دارﻧﺪ.
.2ﭘﯿﻮﺳﺘﮕﯽ ﻧﺎم ﻣﺘﻐﯿﺮ ﺣﻔﻆ ﻣﯽﺷﻮد و ﺧﻄﺎي ﭼﺸﻢ ﺑﺎﻋﺚ ﻧﻤﯽﺷﻮد ﯾﮏ ﻣﺘﻐﯿﺮ ،ﭼﻨﺪ ﻣﺘﻐﯿﺮ ﺧﻮاﻧﺪه ﺷﻮد.
در اﻏﻠﺐ اوﻗﺎت ﻣﺘﻐﯿﺮﻫﺎي ﺗﻌﺮﯾﻒ ﻣﯽﺷﻮﻧﺪ ﮐﻪ ﻫﻤﻪ ﺑﺮاي ﯾﮏ ﻣﻨﻈﻮر ﻫﺴﺘﻨﺪ ﻣﺎﻧﻨﺪ ﻣﺘﻐﯿﺮﻫﺎي واﺳﻂ ﯾﺎ ﻣﻮﻗﺖ در
ﭼﻨﯿﻦ ﻣﻮاﻗﻌﯽ ﻣﺎﻧﻨﺪ ﻣﺜﺎل زﯾﺮ ﻋﻤﻞ ﻧﮑﻨﯿﺪ.
ﻫﻤﻮاره ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﻧﺎﻣﮕﺬاري ﺑﻪ ﺳﺒﮏ tmp1 , tmp2ﻣﺎﻧﻨﺪ اﯾﻦ اﺳﺖ ﮐﻪ ﺷﻤﺎ در ﺧﺎﻧﻮاده ﻧﺎم ﻓﺮزﻧﺪان
را ﺑﮕﺬارﯾﺪ ﺑﭽﻪ اول ،ﺑﭽﻪ دوم و . ...
.5از ﭘﺴﻮﻧﺪ sﺟﻬﺖ ﻣﺘﻐﯿﺮﻫﺎﯾﯽ ﮐﻪ ﺑﯿﺎﻧﮕﺮ ﺗﻌﺪاد ﻫﺴﺘﻨﺪ ﺻﺮﻓﻨﻈﺮ ﮐﻨﯿﺪ و ﺑﻪ ﺟﺎي آن از ﭘﺴﻮﻧﺪ
Listﯾﺎ ﭘﯿﺸﻮﻧﺪ nاﺳﺘﻔﺎده ﮐﻨﯿﺪ.
ﻟﺬا اﺳﺘﻔﺎده از اﯾﻦ ﭘﺴﻮﻧﺪ ﻣﻨﺎﺳﺐ ﻧﻤﯽﺑﺎﺷﺪ ﺑﻪ ﺟﺎي آن ﺑﻬﺘﺮ اﺳﺖ از ﭘﺴﻮﻧﺪ Listﯾﺎ ﭘﯿﺸﻮﻧﺪ nاﺳﺘﻔﺎده ﺷﻮد ﮐﻪ
ﺗﻮﺻﯿ ﻪ ﺑﻪ اﺳﺘﻔﺎده از ﭘﺴﻮﻧﺪ اﺳﺖ اﻣﺎ ﻫﺮ ﻣﻮرد ﮐﻪ اﺳﺘﻔﺎده ﺷﺪ ﺑﺎﯾﺪ در ﺗﻤﺎﻣﯽ ﺑﺮﻧﺎﻣﻪ ﻗﺎﻧﻮن رﻋﺎﯾﺖ ﺷﻮد.
ﻣﻨﻈﻮر از اﯾﻦ ﻗﺎﻧﻮن اﯾﻦ اﺳﺖ ﮐﻪ ﻣﺜﻼ در ﺣﻮﺿﻪ دﯾﺪ ﯾﮏ ﺗﺎﺑﻊ ﻣﯽﺗﻮان ﻣﺘﻐﯿﺮي ﺑﺎ ﻧﺎم tmpﺗﻌﺮﯾﻒ ﻧﻤﻮد اﻣﺎ ﺗﻌﺮﯾﻒ
اﯾﻦ ﻣﺘﻐﯿﺮ در ﺣﻮﺿﻪ دﯾﺪ ﯾﮏ ﮐﻼس اﺻﻼ ﻣﻨﺎﺳﺐ ﻧﻤﯽﺑﺎﺷﺪ .ﺑﻨﺎﺑﺮاﯾﻦ ﺳﻌﯽ ﮐﻨﯿﺪ ﻃﻮل ﻧﺎم ﻣﺘﻐﯿﺮ ﻣﺘﻨﺎﺳﺐ ﺑﺎ
ﺣﻮﺿﻪ دﯾﺪ آن ﺑﺎﺷﺪ و در زﻣﺎن ﺧﻮاﻧﺪن ﮐﺪ اﯾﺠﺎد ﮐﻨﺪي ﯾﺎ ﺳﺮدرﮔﻤﯽ ﻧﮑﻨﺪ.
در اﯾﻦ زﻣﯿﻨﻪ ﻗﺎﻧﻮن ﺳﺮاﻧﮕﺸﺘﯽ اﯾﻦ اﺳﺖ » :ﻃﻮل ﻧﺎم ﻣﺘﻐﯿﺮ ﻋﮑﺲ ﺣﻮﺿﻪ دﯾﺪ آن ﻣﯽﺑﺎﺷﺪ«
9 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
ﻫﻤﺎﻧﻄﻮر ﮐﻪ ﮔﻔﺘﻪ ﺷﺪ ﻧﺎم ﻣﺘ ﻐﯿﺮ ﺑﺎﯾﺪ ﻣﻔﻬﻮم ﺑﺎﺷﺪ اﻣﺎ ﺑﺎﯾﺪ ﺑﻪ ﺧﺎﻃﺮ داﺷﺖ ﮐﻪ اﯾﻦ ﺑﻪ ﻣﻌﻨﺎي اﯾﺠﺎد ﻣﺘﻐﯿﺮﻫﺎي ﺑﺎ
ﻃﻮل زﯾﺎد ﻧﻤﯽﺑﺎﺷﺪ .ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻧﻘﻄﻪاي ﮐﻪ ﻣﺘﻐﯿﺮ ﺗﻌﺮﯾﻒ ﻣﯽﺷﻮد ﮔﺎﻫﯽ ﻣﯽﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از ﺳﺮﻧﺎمﻫﺎ ،ﻧﺎم ﻣﺘﻐﯿﺮ
را ﺧﻼﺻﻪ اﻣﺎ ﻣﻔﻬﻮم اﻧﺘﺨﺎب ﮐﺮد ﮔﺎﻫﯽ ﻫﻢ ﺧﯿﺮ .ﻣﺜﻼ ﻣﻤﮑﻦ اﺳﺖ در ﺣﻮﺿﻪ دﯾﺪ ﯾﮏ ﺗﺎﺑﻊ ﮐﻮﭼﮏ ﺑﺘﻮان از ﻧﺎم
stuIDﺑﺮاي ﺷﻤﺎره ﺷﻨﺎﺳﺎﯾﯽ داﻧﺶآﻣﻮز اﺳﺘﻔﺎده ﻧﻤﻮد اﻣﺎ ﮔﺎﻫﯽ ﻫﻢ ﻣﺠﺒﻮر ﺑﻪ اﺳﺘﻔﺎده از ﻧﺎم studentIDﺷﻮﯾﻢ.
ﺑﻪ ﻫﺮﺣﺎل ﻗﺎﻧﻮن ﻣﻬﻢ اﯾﻦ اﺳﺖ ﮐﻪ ﺑﺎ اﺳﺘﻔﺎده از ﻧﺎمﻫﺎي ﺧﯿﻠﯽ ﻃﻮﻻﻧﯽ ﺑﯿﺨﻮد ﮐﺪ را ﻃﻮﻻﻧﯽ ﻧﮑﻨﯿﻢ و ﺑﺎ اﺳﺘﻔﺎده
از ﻧﺎمﻫﺎي ﺧﯿﻠﯽ ﺧﻼﺻﻪ ﻧﯿﺰ ﮐﺪ را ﻧﺎﻣﻔﻬﻮم ﻧﮑﻨﯿﻢ .در ﯾﮏ ﺟﻤﻠﻪ » ﺗﻔﺮﯾﻂ و اﻓﺮا در ﻃﻮل ﻧﺎم ﻣﺘﻐﯿﺮ ﻧﻨﻤﺎﯾﯿﻢ«
در ﺑﺮﺧﯽ از اﺳﺘﺎﻧﺪاردﻫﺎ ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد * را ﺑﻪ ﻧﻮع ﻣﺘﻐﯿﺮ ﺑﭽﺴﺒﺎﻧﯿﺪ اﻣﺎ اﯾﻦ ﭘﯿﺸﻨﻬﺎد ﻣﻌﺎﯾﺐ زﯾﺮ را دارد:
.1در ﻫﻨﮕﺎم ﺧﻮاﻧﺪن ﺧﻄﺎي ﭼﺸﻢ ﻣﯽﺗﻮاﻧﺪ آن را ﻧﺒﯿﻨﺪ و ﺗﺼﻮر ﺷﻮد ﮐﻪ ﻣﺘﻐﯿﺮ اﺷﺎرهﮔﺮ ﻧﯿﺴﺖ.
.2در اﮐﺜﺮ ﺗﻮﺻﯿﻪﻫﺎي ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ،ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد ﺑﺮاي اﺷﺎرﮔﺮﻫﺎ ﻧﻮع ﺟﺪﯾﺪ ﺗﻌﺮﯾﻒ ﮐﻨﯿﺪ ﺗﺎ ﻣﻮرد ﻗﺒﻞ ﭘﯿﺶ
ﻧﯿﺎﯾﺪ .در واﻗﻊ ﻧﮑﺘﻪ در اﯾﻨﺠﺎﺳﺖ ﮐﻪ ﭼﺴﺒﺎﻧﺪن * ﺑﻪ ﻧﻮع ﺧﻮد ﺑﯿﺎﻧﮕﺮ ﻧﻮع ﺟﺪﯾﺪ اﺳﺖ ﻧﻪ ﻧﺎم ﻣﺘﻐﯿﺮي از ﻧﻮع
اﺷﺎرهﮔﺮ.
ﻋﻼوه ﺑﺮ ﻣﻮارد ﺑﺎﻻ در ﺗﻤﺎﻣﯽ ﮐﺘﺐ آﻣﻮزﺷﯽ ﺗﺎﮐﯿﺪ ﻣﯽﺷﻮد ﮐﻪ در ﺗﻌﺮﯾﻔﯽ ﻣﺎﻧﻨﺪ ﻣﺜﺎل ﺑﺎﻻ featureاﺷﺎرهﮔﺮ اﺳﺖ
اﻣﺎ centerFeatureﻧﯿﺴﺖ ﺣﺎل آﻧﮑﻪ اﯾﻦ ﻣﻮﺿﻮع در اﺳﺘﺎﻧﺪارد ﺗﻮﺻﯿﻪ ﺷﺪه ﺑﻪ ﺧﻮﺑﯽ دﯾﺪه ﻧﻤﯽﺷﻮد اﻣﺎ در
اﺳﺘﺎﻧﺪارد اﯾﻦ ﻣﺴﺘﻨﺪ ﺑﻪ ﺧﻮﺑﯽ دﯾﺪه ﺷﺪه اﺳﺖ.
اﯾﻦ ﻧﮑﺘﻪ ﺟﻬﺖ ﺑﺎﻻﺑﺮدن ﺧﻮاﻧﺎﯾﯽ ﮐﺪ اﺳﺖ و ﺑﺎﻋﺚ ﻣﯽﺷﻮد در ﻣﺘﻦ ﮐﺪ ﺑﻪ راﺣﺘﯽ ﺑﺘﻮان ﻣﺘﻐﯿﺮﻫﺎﯾﯽ ﮐﻼﺳﯽ را
ﺗﺸﺨﯿﺺ داد .ﭘﺮواﺿﺢ اﺳﺖ ﮐﻪ ﺗﻮﺻﯿﻪ 3ﻧﯿﺰ ﺑﺎﯾﺪ در اﯾﻨﺠﺎ رﻋﺎﯾﺖ ﺷﻮد و ﻧﺎم ﻣﺘﻐﯿﺮ ﭼﻮن ﺑﻌﺪ از ﭘﯿﺸﻮﻧﺪ ﻣﯽآﯾﺪ
ﺣﺘﻤﺎ ﺑﺎﯾﺪ ﺑﺎ ﺣﺮف ﺑﺰرگ ﺷﺮوع ﺷﻮد.
class RGFeature
{
10 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
privet:
;int mSize; // NOT: int size_; int _size; int m_size; int msize
}
اﯾﻦ ﺗﻮﺻﯿﻪ ﺗﻘﺮﯾﺒﺎ راﯾﺞ اﺳﺖ ﭼﺮا ﮐﻪ ﺷﻤﺎرﻧﺪه در ﮐﻮﭼﮑﺘﺮﯾﻦ ﺣﻮﺿﻪ دﯾﺪ ﻗﺮار دارد ﭘﺲ ﺑﺎ ﻗﺎﻧﻮن 6و 7ﻫﻤﺨﻮاﻧﯽ
دارد و ﻫﻤﭽﻨﯿﻦ راﯾﺞ ﺑﻮدن آن ﺑﻪ ﻧﻮﻋﯽ ﻗﺎﻧﻮن ﺷﺪه و ﺧﻼف ﻗﺎﻧﻮن ﻋﻤﻞ ﮐﺮدن ﺟﺎﯾﺰ ﻧﻤﯽﺑﺎﺷﺪ.
.11ﻧﺎم ﮐﻼسﻫﺎ ،اﻧﻮاع typeو ﺳﺎﺧﺘﺎرﻫﺎ structureﺣﺘﻤﺎ ﺑﺎ ﺣﺮوف ﺑﺰرگ و ﺑﺎ ﭘﯿﺸﻮﻧﺪ ﻣﻨﺎﺳﺐ ﺷﺮوع
ﺷﻮد.
ﭘﯿﺸﻮﻧﺪ ﻣﻨﺎﺳﺐ ،ﺳﺮﻧﺎم 3ﺷﺮﮐﺖ ﻣﯽﺑﺎﺷﺪ ﮐﻪ ﻣﻌﺮف ﻣﺎﻟﮑﯿﺖ ﮐﺪ اﺳﺖ .اﺳﺘﻔﺎده از ﺣﺮوف ﺑﺰرگ ﺟﻬﺖ ﺗﻤﺎﯾﺰ ﺳﺮﯾﻊ
ﻣﺘﻐﯿﺮ از ﻧﻮع آن ﻣﯽﺑﺎﺷﺪ.
class RGFeature
{
…
;}
// NOT:
… class rgFeature
//NOT:
… class RgFeature
Acronym - 3
11 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
.12ﻧﺎم ﻣﺎﮐﺮوﻫﺎ ﺗﻤﺎﻣﯽ ﺑﺎ ﺣﺮوف ﺑﺰرگ ﺑﺎﺷﺪ و ﺑﺎ ﺧﻂ ﺗﯿﺮه زﯾﺮ _ ﮐﻠﻤﺎت از ﯾﮑﺪﯾﮕﺮ ﺟﺪا ﺷﻮﻧﺪ.
اﺳﺘﻔﺎده از ﺣﺮوف ﺑﺰرگ ﺑﺮاي ﺗﻤﯿﺰ ﺳﺮﯾﻊ ﻣﺎﮐﺮو از ﺳﺎﯾﺮ ﻣﺘﻐﯿﺮﻫﺎ و اﻧﻮاع ﻣﯽﺑﺎﺷﺪ .و ﺧﻂ ﺗﯿﺮه زﯾﺮ ﻧﯿﺰ ﻫﻤﯿﻨﻄﻮر
ﭼﺮا ﮐﻪ در ﺟﺎي دﯾﮕﺮي از آن اﺳﺘﻔﺎده ﻧﻤﯽﺷﻮد.
//NOT:
.13ﻧﺎم ﺗﻮاﺑﻊ ﺑﺎ ﺣﺮوف ﮐﻮﭼﮏ ﺷﺮوع ﺷﺪه ،ﻣﺎﻧﻨﺪ ﻗﺎﻧﻮن ،3و ﺑﯿﺎن ﮐﻨﻨﺪه ﮐﺎرﮐﺮد ﺗﺎﺑﻊ ﺑﺎﺷﺪ.
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ در زﺑﺎن Cﺗﻮاﺑﻊ در ﻋﻤﻞ ﻣﺘﻐﯿﺮﻫﺎي از ﺟﻨﺲ اﺷﺎرهﮔﺮ ﻫﺴﺘﻨﺪ ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ اﯾﻦ ﺗﻮﺟﯿﻪ ﻣﯽﺗﻮان
ﺗﻮﺻﯿﻪ 3را ﻧﯿﺰ در اﯾﻨﺠﺎ اﺳﺘﻔﺎده ﻧﻤﻮد ﻋﻼوه ﺑﺮ آن از دﯾﺪﮔﺎه ﻣﻔﻬﻮﻣﯽ در ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﺗﺎﺑﻊ و ﻣﺘﻐﯿﺮ از ﯾﮏ
ﻣﻔﻬﻮم ﻣﯽﺑﺎﺷﻨﺪ.
ﻧﮑﺘﻪ ﻣﻬﻢ در ﻧﺎم ﺗﻮاﺑﻊ ﻣﻔﻬﻮم ﺑﻮدن ﻧﺎم ﺗﺎﺑﻊ اﺳﺖ .ﺑﺴﯿﺎر ﺿﺮوري اﺳﺖ ﮐﻪ از روي ﻧﺎم ﺗﺎﺑﻊ ﺑﺘﻮان وﻇﯿﻔﻪ آن را
ﺗﺸﺨﯿﺺ داد اﯾﻦ ﻣﻮﺿﻮع ﺑﻪ ﺷﺪت ﺑﻪ ﻣﻬﻨﺪﺳﯽ ﻣﻌﮑﻮس ﮐﺪ ﮐﻤﮏ ﻣﯽﮐﻨﺪ .ﻣﺜﻼ ﺗﺎﺑﻌﯽ ﮐﻪ ﻫﺪف آن اﺳﺘﺨﺮاج
ﻣﻌﺪل ﯾﮏ آراﯾﻪ اﺳﺖ ﻧﺎم averageﺑﺮاي آن ﻧﺎﻣﻨﺎﺳﺐ اﺳﺖ ﭼﺮا ﮐﻪ ﻣﻔﻬﻮم ﻣﺤﺎﺳﺒﻪ در آن دﯾﺪه ﻧﻤﯽﺷﻮد ﺑﻠﮑﻪ
ﺑﻪ ﻧﻈﺮ ﻣﯽآﯾﺪ ﻣﻘﺪاري را ﺑﺎ اﯾﻦ ﻣﻀﻤﻮن ﺧﻮاﻧﺪه و ﺑﺮﻣﯽﮔﺮداﻧﺪ در اﯾﻨﺠﺎ اﺳﺘﻔﺎده از ﻧﺎم calcAverageﯾﺎ
computAverageﻣﻨﺎﺳﺐﺗﺮ اﺳﺖ.
ﺑﺮ ﻫﻤﯿﻦ اﺳﺎس ﺗﻮﺻﯿﻪﻫﺎي زﯾﺮ در ﻧﺎﻣﮕﺬاري ﺗﻮاﺑﻊ ﻣﻔﯿﺪ ﺑﻪ ﻧﻈﺮ ﻣﯿﺂﯾﺪ:
.1ﺗﻮاﺑﻌﯽ ﮐﻪ ﺑﺮاي ﺧﻮاﻧﺪن ﯾﺎ ﻧﻮﺷﺘﻦ ﻣﺘﻐﯿﺮﻫﺎي ﮐﻼﺳﯽ ﻫﺴﺘﻨﺪ ﺑﺎ ﺷﮑﻞ )( ] set[varو )( ]get[var
ﻧﺎﻣﮕﺬاري ﺷﻮﻧﺪ.
.2ﺗﻮاﺑﻌﯽ ﮐﻪ ﺑﺮاي ﺟﺴﺘﺠﻮ ﺑﻪ ﮐﺎر ﻣﯽروﻧﺪ ﺑﺎ ﭘﯿﺸﻮﻧﺪ findﻫﻤﺮاه ﺷﻮﻧﺪ ﻣﺎﻧﻨﺪ findMax,
.findNearestFeature
.3ﺗﻮاﺑﻌﯽ ﮐﻪ ﻣﻘﺪاردﻫﯽ اوﻟﯿﻪ اﻧﺠﺎم ﻣﯽدﻫﻨﺪ ﺑﺎ ﭘﯿﺸﻮﻧﺪ initﯾﺎ initializeﺷﺮوع ﺷﻮﻧﺪ ﻣﺎﻧﻨﺪ .initDistance
12 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
.4از ﭘﯿﺸﻮﻧﺪ isﺑﺮاي ﺗﻮاﺑﻌﯽ ﮐﻪ ﻣﻘﺪار ﺑﻮﻟﯿﻦ ﺑﺮﻣﯽﮔﺮداﻧﻨﺪ اﺳﺘﻔﺎده ﺷﻮد ﻣﺎﻧﻨﺪ isActive, isEnabled
.5در ﺻﻮرت ﻧﯿﺎز ﭘﯿﺸﻮﻧﺪﻫﺎي has , canو shouldﻧﯿﺰ ﺟﺎﯾﮕﺰﯾﻦ ﻣﻨﺎﺳﺒﯽ ﺑﺮاي ﭘﯿﺸﻮﻧﺪ isﻣﯽﺑﺎﺷﻨﺪ.
13 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
2ﻧﺤﻮه ﮐﺪﻧﻮﯾﺴﯽ
ﮐﺪ ﻧﻮﺷﺘﻪ ﺷﺪه ﻇﺎﻫﺮ ﺑﺮﻧﺎﻣﻪ اﺳﺖ ﻧﻪ ﺑﺎﻃﻦ ﺑﺮﻧﺎﻣﻪ ﭘﺲ ﭘﺮواﺿﺢ اﺳﺖ ﮐﻪ ﺑﺎﯾﺪ اﻫﻤﯿﺖ زﯾﺎدي ﺑﻪ ﺑﺎﻃﻦ ﺑﺮﻧﺎﻣﻪ داد
ﻧﻪ ﻇﺎﻫﺮ آن .اﻣﺎ ﻫﺮ ﺑﺎﻃﻦ زﯾﺒﺎ ﺣﺘﻤﺎ ﻫﻤﺮاه ﻇﺎﻫﺮي زﯾﺒﺎ اﺳﺖ و ﻧﻤﯽﺗﻮان ﻣﻮردي را ﯾﺎﻓﺖ ﮐﻪ ﺑﺎﻃﻨﯽ زﯾﺒﺎ اﻣﺎ
ﻇﺎﻫﺮي زﺷﺖ داﺷﺘﻪ ﺑﺎﺷﺪ .ﻇﺎﻫﺮ زﯾﺒﺎ ﻫﻤﻮاره ﺑﺎﻋﺚ ﺟﺬب اﻓﺮاد ﻣﯽﺷﻮد در ﻧﺘﯿﺠﻪ اﮔﺮ ﻣﯽﺧﻮاﻫﯿﺪ ﺳﺎﯾﺮ ﺑﺮﻧﺎﻣﻪ
ﻧﻮﯾﺲﻫﺎ ،ﮐﻪ اﺣﺘﻤﺎﻻ از ﮐﺪ ﺷﻤﺎ ﮐﺎري ﺟﺰ اﯾﺮاد ﮔﺮﻓﺘﻦ ﻧﺪارﻧﺪ ،ﺑﻪ ﮐﺎر ﺷﻤﺎ ﻋﻼﻗﻤﻨﺪ ﺷﻮﻧﺪ ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ رﻋﺎﯾﺖ
ﻇﺎﻫﺮ زﯾﺒﺎ ﺑﺴﯿﺎر ﺑﻪ ﺷﻤﺎ ﮐﻤﮏ ﺧﻮاﻫﺪ ﮐﺮد.
از ﻧﮑﺎت ﻣﻬﻢ در ﮐﺪ ﻧﻮﯾﺴﯽ واﺿﺢ ﺑﻮدن ﮐﺪ اﺳﺖ ﻟﺬا ﺳﻌﯽ ﮐﻨﯿﺪ ﮐﺪﻫﺎ ﻏﯿﺮ ﺿﺮوري ﮐﻪ ﻣﻌﻤﻮﻻ ﺑﻪ ﺗﻮﺿﯿﺤﺎت
) (commentﺗﺒﺪﯾﻞ ﺷﺪهاﻧﺪ ،را ﺣﺬف ﮐﻨﯿﺪ زﯾﺮا اﯾﻦ ﮐﺪﻫﺎ ﻣﻌﻤﻮﻻ ﻓﻘﻂ ﺑﺎﻋﺚ ﻃﻮﯾﻞ ﺷﺪن ﮐﺪ ﺷﻤﺎ ﻣﯽﺷﻮﻧﺪ و
اﺷﮑﺎلزداﯾﯽ ،ﺧﻮاﻧﺪن ﮐﺪ و ردﮔﯿﺮي را ﺑﯽﺟﻬﺖ ﺳﺨﺖ ﻣﯽﮐﻨﻨﺪ .ﭘﺲ ﻫﻤﻮاره ﺳﻌﯽ ﮐﻨﯿﺪ اﮔﺮ از ﺻﺤﺖ
ﮐﺎرﮐﺮدﮐﺪي ﻣﻄﻤﺌﻦ ﺷﺪﯾﺪ ﺳﺎﯾﺮ ﮐﺪﻫﺎي ﺗﻮﺿﯿﺤﯽ را ﺣﺬف ﮐﻨﯿﺪ و اﮔﺮ ﭼﻨﯿﻦ ﻧﯿﺴﺖ اﺑﺘﺪا ﻣﺸﮑﻼت آن ﻗﺴﻤﺖ
را ﺑﺮﻃﺮف ﮐﻨﯿﺪ ﺳﭙﺲ اداﻣﻪ دﻫﯿﺪ.
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﺑﺮاي رﻓﻊ ﺧﻄﺎ ﻣﻌﻤﻮﻻ اﻓﺮاد از اﯾﺠﺎد ﺧﺮوﺟﯽ اﺳﺘﻔﺎده ﻣﯽﮐﻨﻨﺪ ﻣﺜﻼ در زﺑﺎن ﺳﯽ دﺳﺘﻮر
printfﺑﻪ ﻓﺮاوﻧﯽ اﺳﺘﻔﺎده ﻣﯽﺷﻮد .ﺳﻌﯽ ﮐﻨﯿﺪ
;int i
;QStringList clientIP
setupUi(this);
mConfig = config;
*/
// else
layout->addWidget (scn);
int scnNum = 0;
int i;
QStringList clientNames;
QStringList clientIP;
RGSceen *scn;
setupUi(this);
mConfig = config;
else
layout->addWidget (scn);
ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ زﻣﺎﻧﯽ ﮐﻪ ﻣﺘﻨﯽ را ﻣﻄﺎﻟﻌﻪ ﻣﯽﮐﻨﺪ رﻓﺘﻦ ﺑﻪ ﺧﻂ ﺑﻌﺪي ﻫﻢ زﻣﺎنﺑﺮ اﺳﺖ و ﻫﻢ ﻣﯽﺗﻮاﻧﺪ ﺑﺎﻋﺚ
را ﻧﯿﺰ14 ﭘﺮﯾﺪن از روي ﺧﻂ ﺑﻪ دﻟﯿﻞ ﺧﻄﺎي ﭼﺸﻢ ﺷﻮد ﭘﺲ ﺳﻌﯽ ﮐﻨﯿﺪ ﺧﻄﻮط را ﺑﯽﻣﻮرد ﻧﺸﮑﻨﯿﺪ ﺗﺎ ﻗﺎﻧﻮن
.ﻧﻘﺾ ﻧﮑﺮده ﺑﺎﺷﺪ
16 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
// NOT:
int
findMax (
QStringList stringList,
int startIndex)
اﻣﺎ ﭼﻨﺎﻧﭽﻪ ﻃﻮل ﺧﻂ زﯾﺎد ﻃﻮﻻﻧﯽ ﺷﺪ ﺑﻄﻮرﯾﮑﻪ ﻧﯿﺎز ﺑﻪ ﻣﺮور اﻓﻘﯽ ﺻﻔﺤﻪ ﭘﯿﺪا ﮐﺮد آﻧﮕﺎه ﻣﻄﺎﺑﻖ ﻗﻮاﻧﯿﻦ زﯾﺮ ﺳﻌﯽ
.ﮐﻨﯿﺪ ﺧﻄﻮط را ﺑﺸﮑﻨﯿﺪ
int findMax (
QStringList stringList,
int startIndex)
// NOT:
int findMax (
x= (a+b+
c + d );
// NOT:
x=(a+b
+ c + d );
17 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
ﻣﻌﻤﻮﻻ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﺎن ﻫﻤﻮاره ﺑﺎ ﻣﺘﻐﯿﺮﻫﺎي ﻣﻮاﺟﻪ ﻣﯽﺷﻮﻧﺪ ﮐﻪ ﻣﺜﻼ ﺑﯿﺶ از دو ﺳﻪ ﻣﻘﺪار ،ﺣﺎﻟﺖ ،ﻣﺨﺘﻠﻒ ﻧﻤﯽ-
ﮔﯿﺮﻧﺪ در ﭼﻨﯿﻦ ﻣﻮادري ﻣﻤﮑﻦ اﺳﺖ در ذﻫﻦ ﺧﻮد ﺑﺮاي ﻫﺮ ﻣﻘﺪار ﻣﻔﻬﻮﻣﯽ ﻣﺘﺼﻮر ﺷﻮﻧﺪ و در ﻋﺒﺎرات ﺷﺮﻃﯽ،
ورودي ﺗﻮاﺑﻊ و ...ﺑﻪ ﺟﺎي ﻣﻔﻬﻮم ﻋﺪد را ارﺳﺎل ﮐﻨﻨﺪ ﻣﺎﻧﻨﺪ ﻣﺜﺎل زﯾﺮ:
..
..
اﻟﺒﺘﻪ ﮔﺎﻫﯽ ﻣﻮاﻗﻊ در ﮐﺘﺐ ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد در ﭼﻨﯿﻦ ﻣﻮاردي ﻧﻮع ﺷﻤﺎرﺷﯽ ﺗﻌﺮﯾﻒ ﺷﻮد .اﯾﻦ ﻣﻮرد ﺗﻮﺻﯿﻪ ﻧﻤﯽﺷﻮد
ﭼﺮا ﮐﻪ:
.3در زﻣﺎن ﻣﻬﻨﺪﺳﯽ ﻣﻌﮑﻮس ردﮔﯿﺮي ﺗﻌﺪاد زﯾﺎد اﻧﻮاع ﻣﺘﻐﯿﺮ ﮐﺎر را ﺳﺨﺖ ﻣﯽﮐﻨﺪ.
ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ ﻫﯿﭻ اﺑﺰار آراﯾﺸﯽ در زﻣﯿﻨﻪ ﮐﺎرﺑﺮدي ﺧﻮد ﺑﻪ اﻧﺪازه ﻓﻀﺎي ﺧﺎﻟﯽ در ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻗﺪرت زﯾﺒﺎﺳﺎزي
ﻧﺪارد .ﭘﺲ ﺑﺪاﻧﯿﺪ ﻓﻀﺎي ﺧﺎﻟﯽ دوﺳﺖ ﺷﻤﺎﺳﺖ و از آن دوري ﻧﮑﻨﯿﺪ .ﻫﻤﻮاره ﺳﻌﯽ ﮐﻨﯿﺪ در ﻣﻮارد زﯾﺮ ﻓﻀﺎي
ﺧﺎﻟﯽ اﯾﺠﺎد ﺷﻮد.
{
int ;i
{
{
;maxArae = area
}
19 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
}
;return maxArae
}
ﻫﻤﺎﻧﻄﻮر ﮐﻪ دﯾﺪه ﻣﯽﺷﻮد در زﻣﺎن ﺗﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ ﺑﺎ اﺳﺘﻔﺎده از ﻓﻀﺎي ﺧﺎﻟﯽ ﺳﻌﯽ ﺷﺪه اﺳﺖ ﻫﻤﺘﺮازي رﻋﺎﯾﺖ
ﺷﻮد.
ﻗﺎﻧﻮن ﮐﻠﯽ اﯾﻦ اﺳﺖ ﮐﻪ ﻧﻪ اﻓﺮاط ﺷﻮد ﻧﻪ ﺗﻔﺮﯾﻂ ﯾﻌﻨﯽ از ﻓﻀﺎي ﺧﺎﻟﯽ ﺑﻪ اﻧﺪازهاي اﺳﺘﻔﺎده ﺷﻮد ﮐﻪ ﮐﺪ
زﯾﺒﺎ ﺷﻮد و ﺧﻮاﻧﺎﯾﯽ و ﺳﻬﻮﻟﺖ ردﮔﯿﺮي آن ﻧﯿﺰ ﺣﻔﻆ ﺷﻮد ﭘﺲ ﺧﻮد را ﺻﺮﻓﺎ ﻣﻘﯿﺪ ﺑﻪ اﯾﻦ ﻗﺎﻧﻮن ﻧﺪاﻧﯿﺪ
اﻣﺎ آن را ﻧﯿﺰ ﮐﺎﻣﻼ ﻧﻘﺾ ﻧﮑﻨﯿﺪ.
ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﺗﻮاﺑﻊ ﻗﺮار ﻧﯿﺴﺖ ﺧﻮد ﯾﮏ ﺑﺮﻧﺎﻣﻪ ﮐﺎﻣﻞ ﺑﺎﺷﻨﺪ ﺑﻠﮑﻪ ﻫﺪف آنﻫﺎ ﺟﻠﻮﮔﯿﺮي از ﮐﺪ ﻧﻮﯾﺴﯽ
ﻣﺠﺪد و اﯾﺠﺎد ﻣﺠﺮدﺳﺎزي 4اﺳﺖ ﭘﺲ اﮔﺮ ﺗﺎﺑﻌﯽ ﭼﻨﺪ ﻫﺰار ﺧﻂ ﺷﺪ ﯾﻌﻨﯽ اﯾﻦ ﺗﺎﺑﻊ ﺧﻮد ﯾﮏ ﺑﺮﻧﺎﻣﻪ ﮐﺎﻣﻞ اﺳﺖ
ﮐﻪ ﻣﯽﺗﻮاﻧﺪ ﻣﺠﺪدا ﺑﻪ ﭼﻨﺪﯾﻦ ﺗﺎﺑﻊ دﯾﮕﺮ ﺷﮑﺴﺘﻪ ﺷﻮد ﻟﺬا ﻫﺮ ﮔﺎه ﭼﻨﯿﻦ ﺗﺎﺑﻌﯽ را در ﺑﺮﻧﺎﻣﻪ ﺧﻮد دﯾﺪﯾﺪ ﺑﺪاﻧﯿﺪ
ﮐﻪ در ﻃﺮاﺣﯽ ﯾﺎ ﻧﺤﻮه ﭘﯿﺎدهﺳﺎزي اﯾﺮاد اﺳﺎﺳﯽ وﺟﻮد دارد و ﺑﺎﯾﺪ ﺑﺎزﺑﯿﻨﯽ ﺷﻮد.
اﻟﺒﺘﻪ ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ در اﯾﻨﺠﺎ ﺗﻌﺪاد ﺧﻄﻮط ﻣﻔﯿﺪ ﺗﺎﺑﻊ ﻣﺪ ﻧﻈﺮ اﺳﺖ ﭼﺮا ﮐﻪ ﺑﺮﺧﯽ ﺧﻄﻮط ﻣﺎﻧﻨﺪ ﻓﻀﺎﻫﺎي ﺧﺎﻟﯽ
ﮐﻪ ﺟﻬﺖ ﺧﻮاﻧﺎﯾﯽ اﯾﺠﺎد ﺷﺪهاﻧﺪ ﺑﻪ ﺣﺴﺎب ﻧﻤﯽاﯾﻨﺪ .ﺑﻬﺘﺮﯾﻦ ﻣﻌﯿﺎر ﺟﻬﺖ ﺑﺮرﺳﯽ اﯾﻨﮑﻪ آﯾﺎ اﯾﻦ ﺗﺎﺑﻊ ﺑﻠﻨﺪﺗﺮ از ﺣﺪ
ﻧﯿﺎز اﺳﺖ اﯾﻦ اﺳﺖ ﮐﻪ ﻋﻼوه ﺑﺮ ﻃﻮل ﺗﺎﺑﻊ در ﺗﺎﺑﻊ ﺑﯿﺶ از ﯾﮏ ﯾﺎ ﺣﺪاﮐﺜﺮ دو اﻟﮕﻮرﯾﺘﻢ ﭘﯿﺎدهﺳﺎزي ﻧﺸﺪه ﺑﺎﺷﺪ.
ﺑﺮﺧﯽ ﻣﻮاﻗﻊ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﺎن ﺟﻬﺖ ﮐﻮﺗﺎه ﮐﺮدن ﻃﻮل ﺑﺮﻧﺎﻣﻪ از دﺳﺘﻮرات ﺗﻮدرﺗﻮ اﺳﺘﻔﺎده ﻣﯽﮐﻨﻨﺪ .ﻣﺎﻧﻨﺪ ﻣﺜﺎل زﯾﺮ:
Abstraction - 4
20 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
ﻓﻬﻢ اﯾﻦ ﻧﻮع دﺳﺘﻮرات ﺑﺴﯿﺎر ﺳﺨﺖ و ﺣﺘﯽ ﺑﺮاي ﺧﻮد ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ ﻧﯿﺰ ﺑﺴﯿﺎر ﭘﯿﭽﯿﺪه ﻣﯽﺑﺎﺷﺪ و ﻣﯽﺗﻮاﻧﻨﺪ از
دﺳﺘﻮرات ﺧﻄﺎﺧﯿﺰ ﺑﺮﻧﺎﻣﻪ ﺑﺎﺷﺪ ﻟﺬا از ﻧﻮﺷﺘﻦ اﯾﻦ ﻧﻮع دﺳﺘﻮرات ﺷﺪﯾﺪا ﭘﺮﻫﯿﺰ ﮐﻨﯿﺪ و ﺳﻌﯽ ﮐﻨﯿﺪ دﺳﺘﻮر را ﺑﻪ
ﭼﻨﺪ دﺳﺘﻮر ﺑﺸﮑﻨﯿﺪ .ﻣﺎﻧﻨﺪ ﻧﻤﻮﻧﻪ زﯾﺮ:
;a = 2 * x
else
;a = x
// OR:
;a = x
;a = 2 * x
ﭘﺮ واﺿﺢ اﺳﺖ ﮐﻪ ﻧﻤﻮﻧﻪ ﮐﺪ اﺧﯿﺮ ﺑﻪ راﺣﺘﯽ و ﺑﻪ ﺳﺮﻋﺖ ﻗﺎﺑﻞ ﻓﻬﻢ و اﺷﮑﺎل زداﯾﯽ ﻣﯽﺑﺎﺷﺪ.
اﺳﺘﻔﺎده از gotoﺑﺎﻋﺚ ﺷﮑﺴﺘﻪ ﺷﺪن ﺳﺎﺧﺘﺎر ﭘﯿﻤﺎﻧﻪاي ) (Modularﺑﺮﻧﺎﻣﻪ ﻣﯽﺷﻮد ﻟﺬا اﺳﺘﻔﺎده از آن ﺑﺴﯿﺎر
ﻧﺎﻣﻨﺎﺳﺐ اﺳﺖ اﻣﺎ در ﯾﮏ ﻣﻮرد اﺳﺘﻔﺎده از اﯾﻦ دﺳﺘﻮر ﻧﻪ ﺗﻨﻬﺎ ﻣﻨﺎﺳﺐ ﺑﻠﮑﻪ ﭘﺴﻨﺪﯾﺪه ﻣﯽﺑﺎﺷﺪ.
21 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
در ﺑﺮﺧﯽ ﻣﻮاﻗﻊ در ﺗﻮاﺑﻊ در ﻧﻘﺎط ﻣﺨﺘﻠﻒ ﺑﺮﻧﺎﻣﻪ ﻣﻨﺎﺑﻌﯽ اﯾﺠﺎد ﻣﯽﺷﻮد ﮐﻪ ﻗﺒﻞ از ﺧﺮوج از ﺗﺎﺑﻊ ﺑﺎﯾﺪ آزاد ﺷﻮﻧﺪ
اﻣﺎ در ﺗﺎﺑﻊ ﭼﻨﺪﯾﻦ ﻧﻘﻄﻪ ﺧﺮوﺟﯽ وﺟﻮد دارد در ﭼﻨﯿﻦ ﻣﻮاﻗﻌﯽ ﺑﺮاي ﺟﻠﻮﮔﯿﺮي از ﻧﻮﺷﺘﻦ ﺗﮑﺮاري دﺳﺘﻮرات و
ﻫﻤﭽﻨﯿﻦ ﺷﺮطﻫﺎي زﯾﺎد در اﻧﺘﻬﺎي ﺗﺎﺑﻊ ﺑﺮﭼﺴﺐ ﺧﺮوج زده ﻣﯽﺷﻮد و ﺗﺎﺑﻊ از آن ﻧﻘﻄﻪ ﺧﺎرج ﺷﺪه و ﺗﻤﺎﻣﯽ ﻣﻨﺎﺑﻊ
را در ﯾﮏ ﻧﻘﻄﻪ آزاد ﻣﯽﮐﻨﺪ ﻣﺎﻧﻨﺪ ﻣﻮرد زﯾﺮ:
{
…
..
) … ( if
;goto END
…
) … ( for
{
…
) … ( if
;goto END
}
END:
…
}
ﻫﻤﺎﻧﻄﻮر ﮐﻪ دﯾﺪه ﻣﯽﺷﻮد ﭼﻨﺎﻧﭽﻪ از دﺳﺘﻮر gotoاﺳﺘﻔﺎده ﻧﻤﯽﺷﺪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺲ ﻣﺠﺒﻮر ﺑﻮد در ﻧﻘﺎط ﺧﺮوج ﻫﺮ
ﺑﺎر ﮐﺪ ﺗﮑﺮاري ﻧﻮﺷﺘﻪ ﺗﺎ ﺑﺘﻮاﻧﺪ ﻣﻨﺎﺑﻊ را ﺑﻪ درﺳﺘﯽ آزاد ﮐﻨﺪ.
ﻫﻤﭽﻨﯿﻦ در ﺣﻠﻘﻪﻫﺎي ﺗﻮ در ﺗﻮ ﺑﺮاي ﺧﺮوج از ﺣﻠﻘﻪ ﻧﯿﺰ اﺳﺘﻔﺎده از gotoﺑﻼﻣﺎﻧﻊ اﺳﺖ اﻣﺎ ﻫﻤﻮاره ﺑﺎﯾﺪ ﺗﻮﺟﻪ
داﺷﺖ ﮐﻪ ﺳﺎﺧﺘﺎر ﺻﺤﯿﺢ ﮐﻤﺘﺮ ﻧﯿﺎزﻣﻨﺪ ﺑﻪ اﺳﺘﻔﺎده از gotoﺟﻬﺖ ﺧﺮوج از ﺣﻠﻘﻪ ﻣﯽﺷﻮد ﻟﺬا در ﻫﻨﮕﺎم اﺳﺘﻔﺎده
از اﯾﻦ روش ﺣﺘﻤﺎ ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ راهﺣﻞ ﺑﻬﺘﺮي وﺟﻮد ﻧﺪارد
ﻫﻤﻮاره از آوردن #includeﻫﺎ ﺑﺼﻮرت ﻧﺎﻣﻨﻈﻢ و درﻫﻢ ﺧﻮدداري ﮐﻨﯿﺪ .زﯾﺮ اﯾﻦ اﻣﺮ ﺑﺎﻋﺚ ﻣﯽﺷﻮد ﺑﺮﺧﯽ ﺧﻄﺎﻫﺎ
در ﺟﺎﻫﺎﯾﯽ ﺧﻮد را ﻧﻤﺎﯾﺎن ﺳﺎزﻧﺪ ﮐﻪ ﺷﻤﺎ اﻧﺘﻈﺎر آن را ﻧﺪارﯾﺪ ﺑﻪ ﻧﻤﻮﻧﻪ زﯾﺮ ﺗﻮﺟﻪ ﮐﻨﯿﺪ.
/// sample.h
#ifndef RG_SAMPLE_H
#define RG_SAMPLE_H
class RGSample
{
…
}
#endif
///sample.cpp
"#include "sample.h
23 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
"#include "stdio.h
…
ﮐﺎﻣﭙﺎﯾﻞ اﯾﻦ ﮐﺪ ﺑﺎﻋﺚ ﻣﯽﺷﻮد ﮐﺎﻣﭙﺎﯾﻠﺮ ﺑﻪ ﺷﻤﺎ ﺧﻄﺎﯾﯽ ﺑﺪﻫﺪ ﮐﻪ ﻣﻨﺸﺎ آن را در ﻓﺎﯾﻞ stdio.hاﻋﻼم ﮐﻨﺪ! ﭘﺮ
واﺿﺢ اﺳﺖ ﮐﻪ در اﯾﻦ ﻓﺎﯾﻞ از دﯾﺪ ﮐﺎﻣﭙﺎﯾﻠﺮ ﺧﻄﺎﯾﯽ ﻧﺒﺎﯾﺪ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ اﻣﺎ دﻟﯿﻞ ﭼﯿﺴﺖ؟ در واﻗﻊ ﮐﺎﻣﭙﺎﯾﻠﺮ
ﺑﺎ ﻧﺪﯾﺪن ﻋﻼﻣﺖ ; در اﻧﺘﻬﺎي ﺗﻌﺮﯾﻒ ﮐﻼس ﺗﺎ ; ﺑﻌﺪي را ﺧﻮاﻧﺪه و آﻧﮕﺎه ﺧﻄﺎ را در آن ﻧﻘﻄﻪ اﻋﻼم ﻣﯽﮐﻨﺪ و اﯾﻦ
; در ﻓﺎﯾﻞ stdio.hدﯾﺪه ﺧﻮاﻫﺪ ﺷﺪ و ﺣﺎل آﻧﮑﻪ ﺧﻄﺎ در ﻓﺎﯾﻞ sample.hﺑﻮده اﺳﺖ .اﯾﻦ ﻣﻮﺿﻮع ﻣﯽﺗﻮاﻧﺪ ﺑﻪ
ﺳﺮدرﮔﻤﯽ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ ﻣﻨﺠﺮ ﺷﻮد.
ﺑﻨﺎﺑﺮاﯾﻦ ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد ﻫﺪر ﻓﺎﯾﻞﻫﺎ را دﺳﺘﻪ ﺑﻨﺪي ﮐﻨﯿﺪ و ﺑﯿﻦ ﻫﺮ دﺳﺘﻪ ﯾﮏ ﻓﺎﺻﻠﻪ ﻗﺮار دﻫﯿﺪ و آنﻫﺎ را ﺑﺮ
اﺳﺎس اﻃﻤﯿﻨﺎن ﺑﻪ ﺻﺤﺖ ﮐﺎرﮐﺮد ﺑﺎﻻﺗﺮ از ﺑﺎﻗﯽ ﻗﺮار دﻫﯿﺪ .ﺑﻪ اﯾﻦ ﺗﺮﺗﯿﺐ ﻣﻄﻤﺌﻦ ﻫﺪر ﻓﺎﯾﻞﻫﺎي ﺳﯿﺴﺘﻤﯽ ﻗﺒﻞ
از ﻫﻤﻪ و ﻫﺪر ﻓﺎﯾﻞﻫﺎي ﺧﻮد ﺑﺮﻧﺎﻣﻪ در اﻧﺘﻬﺎ ﺑﺎﯾﺪ ﻗﺮار ﺑﮕﯿﺮد.
در ﻧﻤﻮﻧﻪ زﯾﺮ اﻟﮕﻮﯾﯽ ﻋﻤﻮﻣﯽ ﺑﺮاي اﯾﻦ ﻣﻮﺿﻮع ﺑﯿﺎن ﺷﺪه اﺳﺖ.
و اﯾﻦ ﻫﻢ ﯾﮏ ﻧﻤﻮﻧﻪ:
>#include <stdio.h
>#include <stdlib.h
24 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
>#include <QWidget
>#include <QObject
>#include <geos.h
>#include <ogr.h
"#include "sample.h
.1ﭼﻮن ﻫﺪر ﻓﺎﯾﻞﻫﺎ ﺧﻮد در ﻓﺎﯾﻞﻫﺎي ﺳﻮرس وارد ﻣﯽﺷﻮﻧﺪ ﺧﻮد ﺑﺎﻋﺚ ﻧﻘﺾ ﻗﺎﻧﻮن 21ﻣﯽﺷﻮﻧﺪ.
.2ﺗﻘﺪم و ﺗﺎﺧﺮ ﺑﺮﺧﯽ ﻫﺪر ﻓﺎﯾﻞﻫﺎ ﺑﺎﻋﺚ رﺧﺪاد ﺧﻄﺎ در ﮐﺎﻣﭙﺎﯾﻠﺮ ﻣﯽﺷﻮد.
.3ﻣﻤﮑﻦ اﺳﺖ ﻫﺪر ﻓﺎﯾﻞﻫﺎي ﻏﯿﺮ ﺿﺮوري در ﺳﻮرس وارد ﺷﺪه و در ﻧﺘﯿﺠﻪ اﯾﺠﺎد واﺑﺴﺘﮕﯽ ﻏﯿﺮ ﺿﺮوري
ﮐﺮده و زﻣﺎن ﮐﺎﻣﭙﺎﯾﻞ را ﺑﯿﻬﻮده اﻓﺰاﯾﺶ دﻫﺪ.
ﻫﺮ ﭼﻨﺪ ﮐﻪ اﯾﻦ ﻗﺎﻧﻮن ﺑﺎﻋﺚ ﺧﻮاﻫﺪ ﺷﺪ ﮐﻪ ﻟﯿﺴﺖ ﺑﻠﻨﺪي از ﻫﺪر ﻓﺎﯾﻞ در ﻫﺮ ﻓﺎﯾﻞ ﺳﻮرس دﯾﺪه ﺷﻮد اﻣﺎ داراي
ﻣﺰاﯾﺎي زﯾﺮ اﺳﺖ:
.1در ﮐﺘﺎﺑﺨﺎﻧﻪﻫﺎ ﻫﺪر ﻓﺎﯾﻠﯽ ﺗﻌﺮﯾﻒ ﻣﯽﺷﻮد ﮐﻪ ﺗﻤﺎﻣﯽ ﻫﺪر ﻓﺎﯾﻞﻫﺎي دﯾﮕﺮ در آن ﻗﺮار ﻣﯽﮔﯿﺮﻧﺪ و در
ﻫﻨﮕﺎم اﺳﺘﻔﺎده از ﮐﺘﺎﺑﺨﺎﻧﻪ ﺗﻨﻬﺎ آن ﻫﺪر ﻓﺎﯾﻞ ﻧﯿﺎز اﺳﺖ.
.2ﺑﺮﺧﯽ وﻗﺖﻫﺎ ﻣﻤﮑﻦ اﺳﺖ ﯾﮏ ﮐﻼس ﺧﻮد ﺑﻪ ﭼﻨﺪﯾﻦ ﻓﺎﯾﻞ ﺗﺒﺪﯾﻞ ﺷﻮد اﻣﺎ ﺟﻬﺖ ﻣﺪﯾﺮﯾﺖ راﺣﺖﺗﺮ ﺑﺮاي
آن ﯾﮏ ﻓﺎﯾﻞ ﻫﺪر و ﺳﻮرس در ﻧﻈﺮ ﻣﯽﮔﯿﺮﻧﺪ ﮐﻪ ﺗﻤﺎﻣﯽ ﻫﺪر ﻓﺎﯾﻞﻫﺎ و ﺳﻮرس ﻓﺎﯾﻞﻫﺎ در اﯾﻦ دو ﻓﺎﯾﻞ
وارد ﻣﯽﺷﻮﻧﺪ و ﮐﺎﻣﭙﺎﯾﻠﺮ ﻓﻘﻂ اﯾﻦ دو را ﮐﺎﻣﭙﺎﯾﻞ ﻣﯽﮐﻨﺪ.
25 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
ﻫﻤﻮاره ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﻫﺮﺳﺨﻦ ﺟﺎﯾﯽ و ﻫﺮ ﻧﮑﺘﻪ ﻣﮑﺎﻧﯽ دارد ﭘﺲ ﺑﯽﻣﻮﻗﻊ و ﻻﻣﮑﺎن ﺻﺤﺒﺖ ﮐﺮدن
ﺑﺎﻋﺚ دردﺳﺮ اﺳﺖ؛ ﯾﻌﻨﯽ اﮔﺮ ﺷﻤﺎ در ﻫﺪر ﻓﺎﯾﻞ ﭘﯿﺎدهﺳﺎزي اﻧﺠﺎم دﻫﯿﺪ و ﭘﯿﺎدهﺳﺎزي ﺷﻤﺎ ﺧﻄﺎ داﺷﺘﻪ ﺑﺎﺷﺪ آﻧﮕﺎه
ﻣﻤﮑﻦ اﺳﺖ ﮐﺎﻣﭙﺎﯾﻠﺮ ﮐﻮﻫﯽ از ﺧﻄﺎ ﺑﻪ ﺷﻤﺎ ﺗﻘﺪﯾﻢ ﮐﻨﺪ .ﭼﺮا؟ ﭼﻮن ﻫﺪر ﻓﺎﯾﻞ ﻣﻤﮑﻦ اﺳﺖ در ﭼﻨﺪﯾﻦ ﺳﻮرس
ﻓﺎﯾﻞ وارد ﺷﺪه ﺑﺎﺷﺪ و در ﻫﺮ ﮐﺪام ﺧﻮد ﻣﻨﺸﺎ ﺣﺪاﻗﻞ ﯾﮏ ﺧﻄﺎ ﺧﻮاﻫﺪ ﺷﺪ.
ﻋﻼوه ﺑﺮ آن ﻣﻤﮑﻦ اﺳﺖ ﻧﯿﺎز ﺷﻮد ﻫﺪر ﻓﺎﯾﻞ ﻣﻨﺘﺸﺮ 5ﺷﻮد آﻧﮕﺎه ﺳﻮرس ﺷﻤﺎ ﻫﻢ ﻧﯿﺰ ﻣﻨﺘﺸﺮ ﻣﯽﺷﻮد.
ﭼﻨﺎﻧﭽﻪ ﻗﻮاﻧﯿﻦ 20و 21را ﺑﻪ درﺳﺘﯽ رﻋﺎﯾﺖ ﮐﻨﯿﺪ ﻧﯿﺎزي ﺑﻪ ﭘﯿﺶ ﺗﻌﺮﯾﻒ ﻧﺨﻮاﻫﯿﺪ داﺷﺖ .اﺳﺘﻔﺎده از ﭘﯿﺶ
ﺗﻌﺮﯾﻒ ﺗﻨﻬﺎ در زﻣﺎﻧﯽ ﮐﻪ در اﺳﺘﻔﺎده از ﺳﺎﺧﺘﺎرﻫﺎ ﯾﺎ ﮐﻼسﻫﺎ اﯾﺠﺎد ﺣﻠﻘﻪ ﺷﺪه اﺳﺖ ،ﻣﺠﺎز ﻣﯽﺑﺎﺷﺪ و در ﺳﺎﯾﺮ
ﻣﻮارد ﻧﺒﺎﯾﺪ اﯾﻦ ﮐﺎر را ﮐﺮد .اﺳﺘﻔﺎده از ﭘﯿﺶ ﺗﻌﺮﯾﻒ ﻣﺸﮑﻼت زﯾﺮ را دارد:
.1اﮔﺮ ﻧﺎم ﺳﺎﺧﺘﺎر ﯾﺎ ﮐﻼس ﺗﻐﯿﯿﺮ ﮐﻨﺪ ﺗﻘﺮﯾﺒﺎ ﻫﯿﭻ ﻣﺤﯿﻄﯽ وﺟﻮد ﻧﺪارد ﮐﻪ ﺑﺘﻮاﻧﺪ ﺑﺪون اﺳﺘﻔﺎده از اﺑﺰار
search replaceﺑﺼﻮرت ﻫﻮﺷﻤﻨﺪاﻧﻪ ﺗﻤﺎﻣﯽ ﭘﯿﺶﺗﻌﺮﯾﻒﻫﺎ را ﺗﺼﺤﯿﺢ ﮐﻨﺪ.
.2ﻣﻤﮑﻦ اﺳﺖ ﮐﻼﺳﯽ ﺣﺬف ﺷﻮد اﻣﺎ ﭘﯿﺶﺗﻌﺮﯾﻒ آن ﻫﻤﭽﻨﺎن در ﮐﺪ ﺑﻤﺎﻧﺪ ﮐﻪ ﺧﻮد ﻣﯽﺗﻮاﻧﺪ ﺑﺎﻋﺚ ﺧﻄﺎي
ﮐﺎﻣﭙﺎﯾﻠﺮ ﯾﺎ ﻟﯿﻨﮑﺮ ﺷﻮد.
Release - 5
26 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
3ﺗﻮﺿﯿﺤﺎت
ﺗﻘﺮﯾﺒﺎ ﻫﯿﭻ ﮐﺘﺎب ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ وﺟﻮد ﻧﺪارد ﮐﻪ ﺑﻪ ﺷﺪت در آن ﺗﻮﺻﯿﻪ ﺑﻪ ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت در ﺑﺮﻧﺎﻣﻪ ﻧﮑﺮده ﺑﺎﺷﺪ
اﻣﺎ ﻣﻌﻤﻮﻻ ﻧﮑﺘﻪ ﻣﻬﻤﯽ ﮐﻪ ﺑﯿﺎن ﻧﻤﯽﺷﻮد اﯾﻦ اﺳﺖ ﮐﻪ ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت ﻧﯿﺰ ﺑﺎﯾﺪ ﺑﺮ اﺳﺎس ﻗﺎﻋﺪه و اﺻﻮل ﺑﺎﺷﺪ.
ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت ﺑﺪون ﻗﺎﻋﺪه ﻣﺎﻧﻨﺪ ﺧﻂﺧﻄﯽ ﮐﺮدن ﯾﮏ ﻣﺘﻦ اﺳﺖ ﮐﻪ ﻫﯿﭻ ﮐﻤﮑﯽ ﺑﻪ ﺧﻮاﻧﺎﯾﯽ ﻧﻤﯽﮐﻨﺪ.
در ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت ﺑﺎﯾﺪ از ﻗﺎﻋﺪهاي ﭘﯿﺮوي ﺷﻮد ﮐﻪ ﻋﻼوه ﺑﺮ اﯾﺠﺎد ﺗﻮﺿﯿﺤﺎت در ﺑﺮﻧﺎﻣﻪ اﻣﮑﺎن ﺗﻮﻟﯿﺪ ﻣﺴﺘﻨﺪات
ﻧﯿﺰ از آن وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ .ﺑﺮ اﯾﻦ اﺳﺎس اﺳﺘﺎﻧﺪاردﻫﺎي زﯾﺎدي ﺑﺮاي ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت اﯾﺠﺎد ﺷﺪه اﺳﺖ ﮐﻪ
ﻣﻨﺠﺮ ﺑﻪ ﺗﻮﻟﯿﺪ ﻣﺴﺘﻨﺪات ﺑﺮﻧﺎﻣﻪ ﻧﯿﺰ ﻣﯽﺷﻮد ﻣﺎﻧﻨﺪ .doxygen
اﻣﺮوزه راﯾﺞ ﺷﺪه اﺳﺖ ﮐﻪ اﻓﺮاد ﻣﺪﻋﯽ ﻫﺴﺘﻨﺪ زﺑﺎنﻫﺎي ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﺧﻮد ﻣﺴﺘﻨﺪ ﻫﺴﺘﻨﺪ و ﻧﯿﺎزي ﻧﯿﺴﺖ در
ﮐﺪ ﺗﻮﺿﯿﺤﺎت ﺑﮕﺬارﻧﺪ اﻣﺎ ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ:
ﺑﻨﺎﺑﺮاﯾﻦ ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﺪ زﺑﺎن ﺧﻮد ﻣﺴﺘﻨﺪ وﺟﻮد ﻧﺪارد و ﺑﺎﯾﺪ ﺣﺘﻤﺎ در ﮐﺪ ﺧﻮد ﺗﻮﺿﯿﺤﺎت ﺑﻨﻮﯾﺴﯿﺪ.
ﻣﻬﻤﺘﺮﯾﻦ ﻫﺪف ﺗﻮﺿﯿﺤﺎت روﺷﻦ ﮐﺮدن و ﺳﺎده ﻧﻤﻮدن ﻓﻬﻢ ﮐﺪﻫﺎي ﭘﯿﭽﯿﺪه اﺳﺖ و ﮐﺴﯽ ﺑﻪ دﻧﺒﺎل درك ﮐﺪﻫﺎي
ﺳﺎده ﻧﻤﯽﺑﺎﺷﺪ.
ﺣﺘﯽ ﻓﺮدي ﻫﻢ ﮐﻪ ﯾﮏ ﺧﻂ ﮐﺪ ﻧﻨﻮﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺪون ﺗﻮﺿﯿﺢ ﻫﻢ ﻣﯽﺗﻮاﻧﺪ ﺑﻔﻬﻤﺪ دﺳﺘﻮر ﺑﺎﻻ ﭼﻪ ﻣﯽﮐﻨﺪ ﭘﺲ آب
در ﻫﺎون ﻧﮑﻮﺑﯿﺪ.
ﺑﺰرﮔﺎن ﻓﺮﻣﻮدهاﻧﺪ » :ﻣﻦ ﺷﯿﻄﺎن اﺳﺖ« .ﭘﺲ در زﻣﺎن ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت ﻧﮕﻮﯾﯿﺪ » :ﻣﻦ در اﯾﻨﺠﺎ ﻣﻘﺪار ...را
ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮدم« .و ﻫﻤﯿﺸﻪ ﺗﺼﻮر ﮐﻨﯿﺪ دارﯾﺪ ﻣﺴﺘﻨﺪات ﮐﺪ را ﻣﯽﻧﻮﯾﺴﯿﺪ.
ﺑﻨﺎﺑﺮاﯾﻦ ﺳﻌﯽ ﮐﻨﯿﺪ در زﻣﺎن ﻧﻮﺷﺘﻦ ﺗﻮﺿﯿﺤﺎت اﻟﮕﻮرﯾﺘﻢ را ﺑﺼﻮرت واﺿﺢ ﺷﺮح دﻫﯿﺪ و ﮐﺎرﮐﺮد ﻫﺮ ﺧﻂ را ﺟﻠﻮي
آن ﻧﻨﻮﯾﺴﯿﺪ.
<>----------------
در ﻫﻨﮕﺎﻣﯽ ﮐﻪ ﺗﻮﺿﯿﺤﺎﺗﯽ ﺟﻬﺖ اﻃﻼﻋﺎ ﺳﺎﯾﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺲﻫﺎ ﻣﯽﻧﻮﯾﺴﯿﺪ و ﻣﺎﯾﻠﯿﺪ ﺑﻪ آن ﺗﻮﺟﻪ ﮐﻨﻨﺪ ﺳﻌﯽ ﮐﻨﯿﺪ
از ﮐﻠﻤﺎت ﮐﻠﯿﺪي زﯾﺮ اﺳﺘﻔﺎد ﮐﻨﯿﺪ.
: TODO:ﺟﻬﺖ ﺑﯿﺎن ﻣﻮاردي ﮐﻪ ﻧﺎﻗﺺ اﺳﺖ و ﯾﺎ ﺟﻬﺖ ﺑﻬﺒﻮد ﺑﺎﯾﺪ اﻧﺠﺎم ﺷﻮﻧﺪ .1
] : BUG:[bug idﺟﻬﺖ ﺗﻮﺿﯿﺢ ﺧﻄﺎ ﯾﺎ اﺷﮑﺎﻟﯽ ﮐﻪ در ﮐﺪ وﺟﻮد دارد اﻣﺎ راه ﺣﻠﯽ ﺑﺮاي آن ﻧﯿﺴﺖ ﯾﺎ .2
ﻫﻨﻮز ﭘﯿﺎده ﺳﺎزي ﻧﺸﺪه اﺳﺖ .ﺑﺮاي ﻫﺮ ﺧﻄﺎ ﯾﮏ ﺷﻨﺎﺳﻪ اﯾﺠﺎ دﮐﻨﯿﺪ .ﺑﻬﺘﺮﯾﻦ ﺷﻨﺎﺳﻪ ﻧﺎم ﺧﻮدﺗﺎن ﺑﻪ
ﻫﻤﺮاه ﯾﮏ ﺷﻤﺎره ﺗﺮﺗﯿﺒﯽ اﺳﺖ ﻣﺜﻼ bahman02
: KLUDGE:ﻫﺮﮔﺎه ﺑﺨﻮاﻫﯿﺪ ﺑﻪ ﺳﺎﯾﺮﯾﻦ اﻋﻼم ﮐﻨﯿﺪ ﮐﺪي ﮐﻪ ﻧﻮﺷﺘﻪ ﺷﺪه ﻧﺎزﯾﺒﺎ ﯾﺎ ﻧﺎﮐﺎراﻣﺪ اﺳﺖ و ﺑﺎﯾﺪ .3
ﻣﺠﺪدا ﺑﺮرﺳﯽ ﺷﻮد.
: TRICKY:ﻫﺮﮔﺎه در ﻗﺴﻤﺘﯽ از ﮐﺪ از ﺗﺮﻓﻨﺪ ﺧﺎﺻﯽ اﺳﺘﻔﺎده ﮐﺮدهاﯾﺪ ﮐﻪ ﺳﺎﯾﺮﯾﻦ ﺑﺎ آن آﺷﻨﺎ ﻧﯿﺴﺘﻨﺪ .4
ﯾﺎ ﮐﺪي اﺳﺖ ﮐﻪ ﺑﻪ ﺗﻐﯿﯿﺮات ﺳﺎﯾﺮ ﻧﻘﺎط ﺑﺮﻧﺎﻣﻪ ﺣﺴﺎس اﺳﺖ ﺑﺎ اﺳﺘﻔﺎده از اﯾﻦ ﮐﻠﻤﻪ ﮐﻠﯿﺪي ﺳﺎﯾﺮﯾﻦ را
از آن ﺧﺒﺮ دار ﮐﻨﯿﺪ.
: WARNING:ﻫﺮﮔﺎه در ﮐﺪ ﺧﻮد ﻧﻘﺼﯽ وﺟﻮد دارد ﮐﻪ درﺣﺎل ﺣﺎﺿﺮ ﻣﺸﮑﻠﯽ اﯾﺠﺎد ﻧﻤﯽﮐﻨﺪ اﻣﺎ .5
ﭘﺘﺎﻧﺴﯿﻞ اﯾﺠﺎد اﺷﮑﺎل دارد از اﯾﻦ ﮐﻠﻤﻪ اﺳﺘﻔﺎده ﮐﻨﯿﺪ.
: COMPILER:اﮔﺮ در ﻗﺴﻤﺘﯽ از ﮐﺪ ﺧﻄﺎﯾﯽ وﺟﻮد دارد ﮐﻪ ﻧﺎﺷﯽ از ﮐﺎﻣﭙﺎﯾﻠﺮ اﺳﺖ و ﺷﻤﺎ ﻧﺘﻮاﻧﺴﺘﯿﺪ .6
آن را ﺑﺮﻃﺮف ﮐﻨﯿﺪ از اﯾﻦ ﮐﻠﻤﻪ ﺟﻬﺖ ﺗﻮﺿﯿﺤﺎت اﺳﺘﻔﺎده ﮐﻨﯿﺪ.
رﻋﺎﯾﺖ اﺳﺘﻔﺎده از ﮐﻠﻤﺎت ﮐﻠﯿﺪي ﺑﺎﻻ ﺳﺒﺐ ﺧﻮاﻫﺪ ﺷﺪ ﺳﺎﯾﺮﯾﻦ ﺑﺎ دﯾﺪن آن ،ﺗﻮﺿﯿﺤﺎت ﺷﻤﺎ را ﻣﻄﺎﻟﻌﻪ ﮐﻨﻨﺪ و از
اﯾﺠﺎد ﺧﻄﺎ ﺟﻠﻮﮔﯿﺮﯾﯽ ﻧﻤﺎﯾﻨﺪ.
28 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
در اﯾﻦ ﺑﺨﺶ ﺗﻮﺻﯿﻪﻫﺎي ﺑﺮرﺳﯽ ﻣﯽﺷﻮﻧﺪ ﮐﻪ در ﻧﮕﺎه اول ﻣﻤﮑﻦ اﺳﺖ ﺧﯿﻠﯽ ﺑﻪ اﺳﺘﺎﻧﺪارد ﮐﺪ ﻧﻮﯾﺴﯽ و ﯾﺎ
دﺳﺖﮐﻢ ﻇﺎﻫﺮ ﮐﺪ ارﺗﺒﺎﻃﯽ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ اﻣﺎ رﻋﺎﯾﺖ آنﻫﺎ ﺑﻪ ﺷﺪت ﺑﺎﻋﺚ ﺧﻮاﻧﺎﯾﯽ ﮐﺪ ،ﭘﺎﯾﺪاري ﮐﺪ و ﺳﻬﻮﻟﺖ ﻓﻬﻢ
ﮐﺪ ﻣﯽﮔﺮدد.
ﻓﻀﺎي ﻧﺎم اﺑﺰار ﻣﻨﺎﺳﺒﯽ ﺑﺮاي دﺳﺘﻪ ﺑﻨﺪي اﺳﺖ اﻣﺎ اﺳﺘﻔﺎده از آن ﻣﺸﮑﻼت زﯾﺮ را ﻣﯽﺗﻮاﻧﺪ ﺑﻪ ﻫﻤﺮاه داﺷﺘﻪ ﺑﺎﺷﺪ:
اﻟﮕﻮﻫﺎ ﻧﯿﺰ اﺑﺰارﻫﺎي ﻣﻨﺎﺳﺒﯽ ﺑﺮاي ﺗﻮﻟﯿﺪ ﮐﻼسﻫﺎ ﻋﺎم ﻣﻨﻈﻮره ﯾﺎ ﭼﻨﺪ ﻣﻨﻈﻮره ﻧﻤﯽﺑﺎﺷﺪ .ﭼﺮا ﮐﻪ اﯾﻦ ﮐﻼسﻫﺎ
ﻫﯿﭻ ﺑﻬﯿﻨﻪﺳﺎزي در ﮐﺪ اﯾﺠﺎد ﻧﺸﺪه و در زﻣﺎن ﮐﺎﻣﭙﺎﯾﻞ ﺣﺠﻢ ﮐﺪ اﻓﺰاﯾﺶ ﻣﯽﯾﺎﯾﺪ و ﻫﻤﯿﻨﻄﻮر در زﻣﺎن اﺷﮑﺎل
زداﯾﯽ اﻃﻼﻋﺎت ﻧﻮع ﻧﺎﻣﺸﺨﺺ اﺳﺖ .ﻫﻤﭽﻨﯿﻦ ﺑﺎ اﺳﺘﻔﺎده از وراﺛﺖ اﺑﺰار ﺑﺴﯿﺎر ﻗﻮﯾﺘﺮي وﺟﻮد دارد ﮐﻪ ﻣﯽﺗﻮان
ﺟﺎﯾﮕﺰﯾﻦ آن ﻧﻤﻮد.
ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ زﻣﺎﻧﯽ ﮐﻪ اﺳﺘﺜﻨﺎ ﺗﻮﻟﯿﺪ ﻣﯽﮐﻨﯿﺪ ﺑﺎﯾﺪ در ﺟﺎﯾﯽ آن را ﻣﺪﯾﺮﯾﺖ ﮐﻨﯿﺪ و در آن ﻧﻘﻄﻪ ﻣﺠﺒﻮر
ﺧﻮاﻫﯿﺪ ﺷﺪ از ﺑﻠﻮك )( try {} catchاﺳﺘﻔﺎده ﮐﻨﯿﺪ .اﯾﻦ ﺑﻠﻮك ﮐﺪ ﺷﻤﺎ را ﺑﺴﯿﺎر ﻧﺎﮐﺎراﻣﺪ ﻣﯽﮐﻨﺪ ﭼﺮا ﮐﻪ ﮐﺎﻣﭙﺎﯾﻠﺮ
ﻣﺠﺒﻮر اﺳﺖ ﺑﻪ ازاي ﻫﺮ ﺧﻂ ،ﺧﻄﺎ ﺗﻮﻟﯿﺪ و ﻣﺘﻐﯿﺮﻫﺎ را ﺟﻬﺖ ﺗﻮﻟﯿﺪ اﺳﺘﺜﻨﺎ ﺑﺮرﺳﯽ ﮐﻨﺪ ﮐﻪ ﻣﯽﺗﻮان ﺗﺼﻮر ﻧﻤﻮد ﺗﺎ
ﭼﻪ ﺣﺪ ﮐﺎراﯾﯽ ﮐﺪ از ﺑﯿﻦ ﻣﯽرود.
ﻋﻼوه ﺑﺮ اﯾﻦ اﮐﺜﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺲﻫﺎ ﭼﻨﺪان ﺧﻮد را درﮔﯿﺮ ﻣﺪﯾﺮﯾﺖ ﺧﻄﺎ ﻧﻤﯽﮐﻨﻨﺪ ﻟﺬا اﺳﺘﺜﻨﺎﻫﺎ ﺑﺎﻋﺚ ﻧﺎﭘﺎﯾﺪاري ﮐﺪ
ﺧﻮاﻫﺪ ﺷﺪ.
Namespace - 7
Template - 8
Exception - 9
29 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
.31از ﺗﻌﺮﯾﻒ ﮐﻼسﻫﺎي ﻣﻨﻔﺮد 10و ﻣﺘﻐﯿﺮﻫﺎي اﯾﺴﺘﺎ 11ﺟﺪدا ﺧﻮداري ﮐﻨﯿﺪ.
÷ ﯾﮑﯽ از اﻫﺪاف ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﺷﯽ ﮔﺮا ﭘﻨﻬﺎن ﺳﺎزي اﻃﻼﻋﺎت و ﮐﭙﺴﻮﻟﻪ ﮐﺮدن آن اﺳﺖ اﻣﺎ ﮐﻼسﻫﺎي
ﻣﻨﻔﺮد و ﻣﺘﻐﯿﺮﻫﺎي اﯾﺴﺘﺎ اﯾﻦ ﻣﻮﺿﻮع را ﻧﻘﺾ ﻣﯽﮐﻨﻨﺪ .اﺳﺘﻔﺎده از اﯾﻦ ﮐﻼسﻫﺎ ﯾﺎ ﻣﺘﻐﯿﺮﻫﺎ ﺑﺎﯾﺪ ﺑﺎ ﺗﻮﺟﯿﻪ ﻣﻨﺎﺳﺒﯽ
ﻫﻤﺮاه ﺑﺎﺷﺪ.
ﻋﻼوه ﺑﺮ آن در ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺒﺘﻨﯽ ﺑﺮ ﻧﺦ ) (thread base programmingاﯾﻦ ﻧﻮع ﮐﻼسﻫﺎ و ﻣﺘﻐﯿﺮﻫﺎ ﺑﻪ ﺷﺪت
ﺧﻄﺎﺧﯿﺰ ﺑﻮده و ﻣﻮﺟﺒﺎت ﻧﺎﭘﺎﯾﺪاري ﺑﺮﻧﺎﻣﻪ ﻣﯽﺑﺎﺷﻨﺪ.
ﻫﻤﺎﻧﻄﻮر ﮐﻪ ﻣﯽداﻧﯿﺪ ﺳﺎزﻧﺪهﻫﺎ ﻧﻤﯽﺗﻮاﻧﻨﺪ ﺧﻄﺎ ﺑﺮﮔﺮداﻧﺪ و ﻫﺮﮔﺎه ﻓﺮاﺧﻮاﻧﯽ ﻣﯽﺷﻮﻧﺪ ﻓﻀﺎ را ﺑﺮاي ﻣﺘﻐﯿﺮ اﺷﻐﺎل
ﻣﯽﮐﻨﻨﺪ ﭘﺲ اﮔﺮ ﺧﻄﺎﯾﯽ در آنﻫﺎ رخ دﻫﺪ اﻣﮑﺎن ردﮔﯿﺮي آن وﺟﻮد ﻧﺪارد ﭘﺲ ﺳﻌﯽ ﮐﻨﯿﺪ در ﺳﺎزﻧﺪﻫﺎ ﺗﻨﻬﺎ
ﻣﻘﺪاردﻫﯽ اوﻟﯿﻪ ﮐﻨﯿﺪ و دﺳﺘﻮراﺗﯽ را اﺟﺮا ﮐﻨﯿﺪ ﮐﻪ ﺧﻄﺎ اﯾﺠﺎد ﻧﻤﯽﮐﻨﻨﺪ.
ﺑﺴﯿﺎر ﻣﻬﻢ اﺳﺖ ﮐﻪ ﻫﺮﮔﺎه ﺗﺎﺑﻌﯽ ﻓﺮاﺧﻮاﻧﯽ ﻣﯽﺷﻮد و در آن اﻟﮕﻮرﯾﺘﻤﯽ اﺟﺮا ﻣﯽﺷﻮد ﺑﻪ ﻧﺤﻮي ﻓﺮاﺧﻮاﻧﻨﺪه ﺑﺘﻮاﻧﺪ
از ﻧﺘﯿﺠﻪ ﮐﺎر ﻣﻄﻠﻊ ﺷﻮد ﻟﺬا ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد ﻣﺠﻤﻮﻋﻪاي از ﺧﻄﺎﻫﺎ ﺑﺮاي ﻫﺮ ﺗﺎﺑﻊ ﺗﻌﺮﯾﻒ ﺷﻮد و ﺗﺎﺑﻊ در ﺻﻮرت
اﺟﺮا ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﻣﻘﺪار ﺻﻔﺮ ﺑﺮﮔﺮداﻧﺪ و در ﻏﯿﺮ اﯾﻨﺼﻮرت ﺷﻤﺎره ﺧﻄﺎ را ﺑﺮﮔﺮداﻧﺪ .اﻟﺒﺘﻪ در ﺑﺮﺧﯽ ﻣﻮاﻗﻊ ﺗﻮاﺑﻊ
ﺑﺎ ﺗﻌﯿﯿﻦ ﻣﺤﺪوده ﻧﯿﺰ ﺷﻤﺎره ﺧﻄﺎ ﺑﺮﻣﯽﮔﺮداﻧﻨﺪ ﻣﺜﻼ اﮔﺮ ﻣﻘﺪار ﺑﯿﺶ از ﺻﻔﺮ ﺑﺎﺷﺪ ﯾﻌﻨﯽ ﺟﻮاب ﺻﺤﯿﺢ و اﮔﺮ ﮐﻤﺘﺮ
از ﺻﻔﺮ ﺑﺎﺷﺪ ﯾﻌﻨﯽ ﺧﻄﺎ.
ﺑﻪ ﻫﺮ ﺣﺎل ﺑﺴﯿﺎر ﻣﻬﻢ اﺳﺖ ﮐﻪ ﻓﺮاﺧﻮاﻧﻨﺪه ﺑﻪ ﻧﺤﻮي از روﻧﺪ اﺟﺮاي ﺗﺎﺑﻊ ﻣﻄﻠﻊ ﺷﻮد ﭘﺲ ﺟﻌﺒﻪ ﺳﯿﺎه ﻧﺴﺎزﯾﺪ.
در اﻏﻠﺐ ﻣﻮاﻗﻊ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ ﻫﺎ ﺑﻪ ﺟﺎي ﺗﺠﺰﯾﻪ و ﺗﺤﻠﯿﻞ ﻣﺴﺎﻟﻪ و اراﺋﻪ راه ﺣﻞ ﻣﻨﺎﺳﺐ از دﺳﺘﻮرات ﻣﺘﻌﺪد ﺑﺮﻧﺎﻣﻪ-
ﻧﻮﯾﺴﯽ ﻣﺎﻧﻨﺪ … if, switch, for,اﺳﺘﻔﺎده ﻣﯽﮐﻨﻨﺪ در ﺣﺎﻟﯿﮑﻪ ﺑﺎ اﻧﺪﮐﯽ ﺗﺠﺰﯾﻪ و ﺗﺤﻠﯿﻞ ﺑﻪ راﺣﺘﯽ ﻣﯽﺗﻮان ﺑﺎ
Singleton - 10
Static - 11
30 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
ﯾﮏ راﺑﻄﻪ رﯾﺎﺿﯽ دﺳﺘﻮرات ﻣﺘﻌﺪد را ﺣﺬف ﻧﻤﻮد .ﻣﺜﻼ ﻓﺮض ﮐﻨﯿﺪ زاوﯾﻪ ) θ(tetaﻣﺸﺨﺺ اﺳﺖ و ﺑﺎﯾﺪ ﺗﻌﯿﯿﻦ
ﻧﻤﻮد در ﮐﺪام ﻧﺎﺣﯿﻪ ﻗﺮار دارد.
;area = 1
;area = 2
;area = 3
;area = 4
ﺑﻪ راﺣﺘﯽ ﻣﯽﺗﻮان دﯾﺪ ﺑﻪ ﺟﺎي 8ﺧﻂ ﺑﺎﻻ ﻣﯽﺗﻮان ﺧﻂ زﯾﺮ را ﺟﺎﯾﮕﺰﯾﻦ ﻧﻤﻮد.
ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ ﺗﺠﺰﯾﻪ و ﺗﺤﻠﯿﻞ ﻣﺴﺎﻟﻪ ﻣﯽﺗﻮان ﮐﺪ را ﮐﻮﺗﺎﻫﺘﺮ و ﺧﻮاﻧﺎﺗﺮ ﻧﻤﻮد .راه اول ﺳﺎدهﺗﺮﯾﻦ راه و اوﻟﯿﻦ راﻫﯽ
اﺳﺖ ﮐﻪ ﺑﻪ ذﻫﻦ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺲ ﻣﯽرﺳﺪ ﻟﺬا ﻫﻤﻮاره اوﻟﯿﻦ راهﺣﻞ ﺑﻬﺘﺮﯾﻦ راهﺣﻞ ﻧﯿﺴﺖ.
31 ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ
5ﻟﯿﺴﺖ ﺗﻮﺻﯿﻪﻫﺎ
.3ﻧﺎم ﻣﺘﻐﯿﺮ ﺑﺎ ﺣﺮوف ﮐﻮﭼﮏ ﺷﺮوع ﺷﻮد و در ﻣﺘﻐﯿﺮﻫﺎي ﭼﻨﺪ ﮐﻠﻤﻪاي ﺣﺮف اول ﻫﺮ ﮐﻠﻤﻪ ،ﻏﯿﺮ
از ﮐﻠﻤﻪ اول ،ﺑﺎ ﺣﺮوف ﺑﺰرگ ﺑﺎﺷﺪ.
.5از ﭘﺴﻮﻧﺪ sﺟﻬﺖ ﻣﺘﻐﯿﺮﻫﺎي ﮐﻪ ﺑﯿﺎﻧﮕﺮ ﺗﻌﺪاد ﻫﺴﺘﻨﺪ ﺻﺮﻓﻨﻈﺮ ﮐﻨﯿﺪ و ﺑﻪ ﺟﺎي آن از ﭘﺴﻮﻧﺪ List
ﯾﺎ ﭘﯿﺸﻮﻧﺪ nاﺳﺘﻔﺎده ﮐﻨﯿﺪ.
.10ﻧﺎم ﮐﻼسﻫﺎ ،اﻧﻮاع typeو ﺳﺎﺧﺘﺎرﻫﺎ structureﺣﺘﻤﺎ ﺑﺎ ﺣﺮوف ﺑﺰرگ و ﺑﺎ ﭘﯿﺸﻮﻧﺪ RGﺷﺮوع
ﺷﻮد.
.11ﻧﺎم ﻣﺎﮐﺮوﻫﺎ ﺗﻤﺎﻣﯽ ﺑﺎ ﺣﺮوف ﺑﺰرگ و ﺑﺎ ﺧﻂ ﺗﯿﺮه زﯾﺮ _ ﮐﻠﻤﺎت از ﯾﮑﺪﯾﮕﺮ ﺟﺪا ﺷﻮﻧﺪ.
.12ﻧﺎم ﺗﻮاﺑﻊ ﺑﺎ ﺣﺮوف ﮐﻮﭼﮏ ﺷﺮوع ﺷﺪه ،ﻣﺎﻧﻨﺪ ﻗﺎﻧﻮن ،3و ﺑﯿﺎن ﮐﻨﻨﺪه ﮐﺎرﮐﺮد ﺗﺎﺑﻊ ﺑﺎﺷﺪ.
.30از ﺗﻌﺮﯾﻒ ﮐﻼسﻫﺎي ﻣﻨﻔﺮد ) (singletonو ﻣﺘﻐﯿﺮﻫﺎي اﯾﺴﺘﺎ ) (staticﺟﺪدا ﺧﻮداري ﮐﻨﯿﺪ.