Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
60
MicrosoftVisualC#2012Krokpokroku
Operatoryitypydanych
Niewszystkieoperatorymożnastosowaćzewszystkimitypamidanych.To,jakich
operatorówmożnaużyćwobecokreślonejwartości,zależyodtypudanychtejwarto-
ści.Przykładowo,operatoryarytmetycznemożnastosowaćwobecwartościtypuchar,
int,long,float,doublelubdecimal.Zwyjątkiemoperatoraplus+,operatorówtychnie
możnajednakstosowaćnp.wobecwartościtypustring,awobecwartościtypuboolnie
możnaużyćżadnegoznich.Takwięcpokazanaponiżejinstrukcjajestnieprawidło-
wa,ponieważtypstringnieobsługujeoperatoraminus(wynikodejmowaniajednego
łańcuchaznakowegooddrugiegobyłbynieokreślony):
//błądpodczaskompilacji
ConsoleiWriteLine("Gillingham"1"ForestGreenRovers");
Możliwejestnatomiastużywanieoperatora+dokonkatenacji(scalania)wartościtypu
string.Stosująctenoperatorwtakisposóbnależyjednakzachowaćostrożność,ponieważ
rezultatjegodziałaniamożebyćróżnyodnaszychoczekiwań.Przykładowo,pokazana
poniżejinstrukcjaspowodujewypisaniewokniekonsoliwartości431(anie44”):
ConsoleiWriteLine("43"+"1");
WSKAZÓWKAPlatforma.NETFrameworkoferujemetodęonazwieInt32.Parse,zapomocą
którejmożnaprzekształcaćłańcuchyznakowenaliczbycałkowite,gdyzachodzipotrzebawy-
konaniaoperacjiarytmetycznychnawartościachprzechowywanychjakołańcuchyznakowe.
Należyrównieżmiećświadomośćtego,żetypdanychrezultatudziałaniaoperato-
raarytmetycznegozależnyjestodtypudanychużytychargumentówtegooperatora.
Przykładowo,wartościąwyrażenia5.0/2.0jest2.5;obydwaargumentywtymprzypad-
kutypudouble,awięcrezultatrównieżjesttypudouble.(WjęzykuC#literałyliczbowe,
wktórychwystępujekropka1zawszetypudouble,anieoat,copozwalazachować
maksymalnąmożliwądokładność).Jednakżewartościąwyrażenia5/2jest2.Wtymprzy-
padkuobydwaargumentytypuint,awięcrezultatrównieżjesttypuint.Wtakich
sytuacjachjakta,językC#zawszezaokrąglawartościwdół(aściślejmówiączaokrągla
częśćwdółwartośćbezwzględnąrezultatu).Sytuacjastajesięniecobardzozłożona,
jeśliużywamyargumentówróżnychtypów
.Przykładowo,wyrażenie5/2.0zawierakom-
binacjętypówintidouble.Kompilatorwykryjetakieniedopasowanietypówiprzed
wykonaniemoperacjiprzekształciwartośćtypuintdotypudouble.Wynikiemtejoperacji
będziewięcwartośćtypudouble(2.5).Wprawdziemieszanietypówdanychwjednym
wyrażeniuniejestbłędem,alejesttouznawanezazłąpraktykęwprogramowaniu.
JęzykC#oferujerównieżjedenmniejznanyoperatorarytmetyczny:jesttorepre-
zentowanyprzezznakprocentu(%)operatorresztyzdzielenialubtzw.dzielenia
1Wjęzykachprogramowania,atakżewjęzykuangielskimczęśćdziesiętnąliczbodczęścicałko-
witejoddzielasięznakiemkropki,anieznakiemprzecinka.