Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2.2.STUDIUMPRZYPADKU
któregonieznajdziemywinnychoperacjęwjęzykuPythonoznaczasiędigrafem**,
awVB.NETznakiem^17.Innymprzykłademmożebyćdośćcharakterystycznyoperator
===,występującywtejpostacim.in.wjęzykachPHP
,ActionScriptorazJavaScript,który
oznaczarównośćcodowartościoraztypu18.
Oczywiście,imbardziejzagłębimysięwdanyjęzyk,tymwięcejcharakterystycznych
wyrażeńdlaniegoznajdziemy.Przykłademmożebyćdośćnietypoweużycieoperatora
<<przywypisywaniudanychnastandardowewyjściewC++:
std::cout<<1234<<std::endl;19
Podsumowując:wwiększościprzypadkówróżnicepomiędzyjęzykamisprowadzają
siędokosmetyki,coznacznieułatwiaiprzyspieszaanalizęobcegokodu.Wprzypadku
nieznanychwyrażeńmożemyzawszesięgnąćdodokumentacjilubkursówpoświęconych
danemujęzykowiprogramowania.Gorzejjestwprzypadkutzw.fałszywychprzyjaciół
(falsefriends),czyliwyrażeńwyglądającychtaksamojakzapisyzeznanegonamjęzyka,
alejednakoznaczającychcośinnegowkażdymmomencieanalizynależypodchodzić
więczpewnymdystansemdowyciągniętychwnioskówiwraziepotrzebyjeweryfikować.
2.2.Studiumprzypadku
Opierającsięnaopisanychprawidłowościachiwskazówkach,przeanalizujmywspólnieprzy-
kładowyfragmentkodu.CzytelnikównieznającychjęzykówzrodzinyC/C++zachęcam
dopróbywykonaniaanalizywewłasnymzakresie,apotemporównaniawnioskówzmoimi,
wskazanymidalej.Wanaliziepominęwszystkieinformacje,doktórychwywnioskowania
potrzebnajestznajomośćdanegojęzyka;ujmęnatomiastpewnewnioski,dojakichmoż-
nadojść,posiadającogólnąwiedzęzinformatykiiprogramowania(napotrzebyanalizy
przyjmęzałożenie,żeczytelnikdysponujepodstawowąwiedząztejdziedziny).Dodat-
kowoprzykażdymwnioskuwskażę,którametodapozwoliłamidoniegodojść;zaznaczę
równieżkonkluzje,którepoczątkowowydawałysiępoprawne,aletakimiostatecznienie
były.Wtymceluposłużęsięnastępującymioznaczeniami:
17Użycie^,czylikarety(popularniezwanejhdaszkiem”)dooznaczeniapotęgowaniamożedziwić,szczególnie
żewwiększościjęzykówznakiemtymoznaczasiębitowyXOR.MatopodłożehistorycznewDartmouthBASIC
(czylipierwszym,oryginalnymjęzykuztejrodziny)potęgowaniebyłoreprezentowanezapomocąznaku
(strzałkawgórę)[2].PodobniebyłowkolejnychwersjachjęzykaBASIC,alezczasemznakzniknąłzklawiatur,
apojawiłsiędobrzenamznanyhdaszek”(kareta),któryjednakwizualniepodobnyjestdopoprzednikazostał
więczaadoptowanywjęzykachzrodzinyBASICdooznaczeniaoperacjipotęgowania.
18Wjęzykachostosunkowosłabymtypowaniumożliwejestporównaniezmiennychobardzoróżnychtypach,
operacjarównościcodowartościjestwięczazwyczajniewystarczająca.
19Wyrażenietomożnazapisaćrównieżzapomocątradycyjnychwywołańfunkcjiimetod,tj.:
std::cout.operator<<(1234);
std::endl(std::cout);
Pewnymzaskoczeniemmożebyćto,żestd::endljestfunkcją,anie,jakmożnabyprzypuszczać,stałątypu
charreprezentującąznaknowejlinii.Wartozaznaczyć,żeopróczprzejściadonowejliniifunkcjatapowoduje
równieżopróżnieniebufora,czylitzw.flush.
49