You are on page 1of 14

‫اﻟﻤﺸﻐﻼت واﻟﺘﻌﺎﺑﯿﺮ اﻟﺒﺮﻣﺠﯿﺔ‬

‫‪Operators and‬‬
‫‪Expressions‬‬
‫اﻟﺘﺤﻮﯾﻞ ﺑﯿﻦ أﻧﻮاع اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻟﻐﺔ ‪C#‬‬

‫م‪ .‬ﻋﺒﺪ اﻟﻨﺎﺻﺮ ﻣﺤﻤﺪ اﻷﻋﺮج‬


‫ﻟﻛن‪ ،‬ھل ﯾﻣﻛﻧﻧﺎ إﺟراء ﻋﻣﻠﯾﺎت ﻋﻠﻰ أﻧواع ﻣﺧﺗﻠﻔﺔ ﻣن اﻟﺑﯾﺎﻧﺎت‪ ،‬ﺑﺎﻟطﺑﻊ ﯾﻣﻛﻧﻧﺎ ذﻟك وﻟﻛن ﻋﻠﻰ أن ﯾﺗم اﺧﺗﯾﺎر‬
‫اﻟﻣﺷﻐل اﻟﺻﺣﯾﺢ‪ ،‬ﻣﺛﻼ اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﺗﺗم ﻋﻠﻰ اﻷرﻗﺎم؟‬

‫إن ﻧﺎﺗﺞ ﻋﻣﻠﯾﺔ ﺟﻣﻊ ﻣﺗﻐﯾرﯾن ﻣن ﻧوع ‪ int‬ھو رﻗم ﻣن ﻧوع ‪ ،int‬إﻻ أن اﻟﻣﺗرﺟم ﻟم ﯾﻌطﻲ ﺧطﺄ ﻋﻧد ﻗﯾﺎﻣﻧﺎ ﺑﺈﺳﻧﺎد‬
‫ﻧﺎﺗﺞ ﻋﻣﻠﯾﺔ اﻟﺟﻣﻊ إﻟﻰ اﻟﻣﺗﻐﯾر ‪ result‬رﻏم اﺧﺗﻼف اﻧواع اﻟﺑﯾﺎﻧﺎت‪ ،‬ﺣﯾث أﻧﮫ ﻗﺎم ﺑﺷﻛل ﺿﻣﻧﻲ ﺑﺗﺣوﯾل اﻟﺑﯾﺎﻧﺎت‬
‫ﻣن ﻧوع ‪ int‬إﻟﻰ ﻧوع ‪. float‬‬
‫إذا‪ ،‬ﻣﺗﻰ ﯾﺟب ﻋﻠﯾﻧﺎ ﺗﺣوﯾل اﻟﺑﯾﺎﻧﺎت ﺑﺷﻛل ﺻرﯾﺢ ﻹﺟراء ﻋﻣﻠﯾﺔ ﺣﺳﺎﺑﯾﺔ؟‬

‫ﻻﺣظ اﻟﻣﺛﺎل اﻟﺗﺎﻟﻲ‬

‫ﻟﺣل ھذه اﻟﻣﺷﻛﻠﺔ ﯾﺟب ﻋﻠﯾﻧﺎ إﺟراء ﻋﻣﻠﯾﺔ ﺗﺣوﯾل ﺑﯾﺎﻧﺎت ﺑﺷﻛل ﺻرﯾﺢ ﻛﻣﺎ ﻓﻲ اﻟﻣﺛﺎل اﻟﺗﺎﻟﻲ‪:‬‬
‫أﻧﻮاع ﻋﻤﻠﯿﺎت اﻟﺘﺤﻮﯾﻞ‬
‫ﯾﻣﻛن ﺗﻘﺳﯾم ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل ﺑﯾن أﻧواع اﻟﺑﯾﺎﻧﺎت إﻟﻰ ﺛﻼﺛﺔ ﻣﺟﻣوﻋﺎت رﺋﯾﺳﯾﺔ‪:‬‬

‫اﻟﺗﺣوﯾل اﻟﺿﻣﻧﻲ ‪implicit conversion‬‬

‫اﻟﺗﺣوﯾل اﻟﺻرﯾﺢ ‪explicit conversion‬‬

‫اﻟﺗﺣوﯾل ﻣن وإﻟﻰ اﻟﺳﻼﺳل اﻟﻧﺻﯾﺔ ‪string‬‬


‫أوﻻً‪ :‬اﻟﺘﺤﻮﯾﻞ اﻟﻀﻤﻨﻲ ‪implicit conversion‬‬
‫ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل ﺑﯾن ﻣﺧﺗﻠف أﻧواع اﻟﺑﯾﺎﻧﺎت ﺑﺷﻛل ﺿﻣﻧﻲ ﺗﺗم ﺑﺷﻛل آﻟﻲ دون ﺗدﺧل اﻟﻣﺑرﻣﺞ‪ ،‬ﺣﯾث ﯾﻘوم‬
‫ﺑﮭﺎ اﻟﻣﺗرﺟم أﺛﻧﺎء ﻋﻣﻠﯾﺔ ﺗرﺟﻣﺔ اﻟﺑرﻧﺎﻣﺞ‪ ،‬وﺗﺗم ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل اﻟﺿﻣﻧﻲ ﺑﯾن ﻣﺧﺗﻠف أﻧواع اﻟﺑﯾﺎﻧﺎت ﻋﻧد‬
‫ﺿﻣﺎن ﻋدم ﺣدوث ﺧطر ﻟﻔﻘدان اﻟﺑﯾﺎﻧﺎت‪.‬‬
‫أوﻻً‪ :‬اﻟﺘﺤﻮﯾﻞ اﻟﻀﻤﻨﻲ ‪implicit conversion‬‬
‫ﺑﺎﺧﺗﺻﺎر‪ ،‬اﻟﺗﺣوﯾل اﻟﺿﻣﻧﻲ ﯾﺣدث ﺑﯾن ﻧوع ﺑﯾﺎﻧﺎت ﻋﺑﺎرة ﻋن ﻣﺟﻣوﻋﺔ ﺟزﺋﯾﺔ ﻣن ﻧوع اﻟﺑﯾﺎﻧﺎت اﻵﺧر‪.‬‬

‫ﻣﺛﻼ ‪ int‬ﻣﺟﻣوﻋﺔ ﺟزﺋﯾﺔ ﻣن ‪ long‬وأﯾﺿﺎ ﻣﺟﻣوﻋﺔ ﺟزﺋﯾﺔ ﻣن ‪float‬‬

‫و ‪ long‬ﻣﺟﻣوﻋﺔ ﺟزﺋﯾﺔ ﻣن ‪.float‬‬


implicit conversion ‫ اﻟﺘﺤﻮﯾﻞ اﻟﻀﻤﻨﻲ‬:ً‫أوﻻ‬
‫ﺛﺎﻧﯿﺎ ً‪ :‬اﻟﺘﺤﻮﯾﻞ اﻟﺼﺮﯾﺢ ‪explicit conversion‬‬
‫ﯾﺗم اﺳﺗﺧدام اﻟﺗﺣوﯾل اﻟﺻرﯾﺢ ﺑﯾن أﻧواع اﻟﺑﯾﺎﻧﺎت اﻟﻣﺧﺗﻠﻔﺔ ﻋﻧدﻣﺎ ﯾﻛون ھﻧﺎك اﺣﺗﻣﺎﻟﯾﺔ ﻓﻘدان ﻟﻠﺑﯾﺎﻧﺎت‪،‬‬
‫ﻣﺛﻼ اﻟﺗﺣوﯾل ﺑﯾن ﻧوع ﺑﯾﺎﻧﺎت ذو ﻣﺟﺎل ﻛﺑﯾر إﻟﻰ ﻧوع ﺑﯾﺎﻧﺎت ذو ﻣﺟﺎل ﺻﻐﯾر )ﻋﻠﻰ ﺳﺑﯾل اﻟﻣﺛﺎل اﻟﺗﺣوﯾل‬
‫ﻣن ‪ long‬إﻟﻰ ‪ ،(int‬أو اﻟﺗﺣوﯾل ﻣن ﻋدد ﻋﺷري إﻟﻰ ﻋدد ﺻﺣﯾﺢ )ﻋﻠﻰ ﺳﺑﯾل اﻟﻣﺛﺎل اﻟﺗﺣوﯾل ﻣن‬
‫‪ float‬إﻟﻰ ‪ int‬ﺣﯾث ﺳﯾﺗم ﻓﻘدان اﻟﺟزء اﻟﻌﺷري ﻣن اﻟرﻗم(‪.‬‬

‫ﯾﻣﻛن إﺟراء ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل اﻟﺻرﯾﺢ ﺑﯾن أﻧواع اﻟﺑﯾﺎﻧﺎت اﻟﺗﺎﻟﯾﺔ ﻓﻘط وھﻲ اﻟﺑﯾﺎﻧﺎت اﻟرﻗﻣﯾﺔ ﻓﻘط‬
‫ﺛﺎﻧﯿﺎ ً‪ :‬اﻟﺘﺤﻮﯾﻞ اﻟﺼﺮﯾﺢ ‪explicit conversion‬‬
‫ﻹﺟراء ﻋﻣﻠﯾﺔ ﺗﺣوﯾل ﻧوع اﻟﺑﯾﺎﻧﺎت ﺑﺷﻛل ﺻﺣﯾﺢ‪ ،‬ﯾﺟب اﺳﺗﺧدام ﻣﺷﻐل ﺗﺣوﯾل اﻟﺑﯾﺎﻧﺎت )‪،(data type‬‬
‫اﻟﻣﺛﺎل اﻟﺗﺎﻟﻲ ﯾوﺿﺢ ﻛﯾﻔﯾﺔ اﺳﺗﺧدام ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل اﻟﺻرﯾﺢ ﻟﻠﺑﯾﺎﻧﺎت واﺣﺗﻣﺎﻟﯾﺔ ﻓﻘدان اﻟﺑﯾﺎﻧﺎت ﻓﻲ ﺑﻌض‬
‫اﻟﺣﺎﻻت‪.‬‬
‫ﺛﺎﻧﯿﺎ ً‪ :‬اﻟﺘﺤﻮﯾﻞ اﻟﺼﺮﯾﺢ ‪explicit conversion‬‬
‫ﻟﯾس ھذا ﻓﺣﺳب‪ ،‬ﺣﺗﻰ ﻟو ﻛﺎﻧت أﻧواع اﻟﺑﯾﺎﻧﺎت أرﻗﺎم ﺻﺣﯾﺣﺔ‪ ،‬ﻓﺈن ﻋﻣﻠﯾﺔ اﻟﺗﺣوﯾل ﻣن ﻧوع ﺑﯾﺎﻧﺎت ذو‬
‫ﻣﺟﺎل أوﺳﻊ ﻟﺗﻣﺛﯾل اﻷرﻗﺎم اﻟﺻﺣﯾﺣﺔ إﻟﻰ ﻧوع ﺑﯾﺎﻧﺎت ذو ﻣﺟﺎل أﺻﻐر ﺳﯾﺗم ﻓﻘدان اﻟﻘﯾﻣﺔ ﺑﺎﻟﻛﺎﻣل إذا ﻛﺎن‬
‫ﻟﯾس ﺑﺎﻹﻣﻛﺎن ﺗﻣﺛﯾﻠﮫ‪.‬‬
explicit conversion ‫ اﻟﺘﺤﻮﯾﻞ اﻟﺼﺮﯾﺢ‬:ً ‫ﺛﺎﻧﯿﺎ‬
explicit conversion ‫ اﻟﺘﺤﻮﯾﻞ اﻟﺼﺮﯾﺢ‬:ً ‫ﺛﺎﻧﯿﺎ‬
‫ﺛﺎﻟﺜﺎ ً‪ :‬ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ إﻟﻰ ﺳﻠﺴﻠﺔ ﻧﺼﯿﺔ ‪string‬‬
‫ﻓﻲ ﻟﻐﺔ ‪ C#‬ﯾﻣﻛﻧﻧﺎ ﺗﺣوﯾل أي ﻧوع ﺑﯾﺎﻧﺎت إﻟﻰ ﺳﻠﺳﻠﺔ ﻧﺻﯾﺔ ‪ ،string‬ﻓﻌﻣﻠﯾﺔ اﻟﺗﺣوﯾل إﻟﻰ ﺳﻠﺳﻠﺔ ﻧﺻﯾﺔ‬
‫ﺗﺗم ﺑﺷﻛل آﻟﻲ ﻋﻧد اﺳﺗﺧدام ﻣﺷﻐل اﻟوﺻل )‪ (+‬ﺑﯾن ﺳﻠﺳﻠﺔ ﻧﺻﯾﺔ واﻟﻣﻌﺎﻣل اﻟﺛﺎﻧﻲ ﻟﯾس ﺳﻠﺳﻠﺔ ﻧﺻﯾﺔ‪،‬‬
‫وﻓﻲ ھذه اﻟﺣﺎﻟﺔ ﺳﯾﺗم ﺗﺣوﯾل اﻟﻣﻌﺎﻣل اﻟﺛﺎﻧﻲ إﻟﻰ ﺳﻠﺳﻠﺔ ﻧﺻﯾﺔ ﺑﺷﻛل آﻟﻲ‪ ،‬ﺷﺎھد اﻟﻣﺛﺎل اﻟﺗﺎﻟﻲ‪:‬‬

You might also like