Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2.2.STUDIUMPRZYPADKU
któregonieznajdziemywinnych–operacjętę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śinnego–wkaż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żehistoryczne–wDartmouthBASIC
(czylipierwszym,oryginalnymjęzykuztejrodziny)potęgowaniebyłoreprezentowanezapomocąznaku↑
(strzałkawgórę)[2].PodobniebyłowkolejnychwersjachjęzykaBASIC,alezczasemznak↑zniknąłzklawiatur,
apojawiłsiędobrzenamznanyhdaszek”(kareta),któryjednakwizualniepodobnyjestdopoprzednika–został
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