Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2.Myśleniefunkcyjnedlaimperatywnegoumysłu8
ataniejest:
privateintcounter=0;
publicvoidincrementMutableCounter(){
counter++;
}
Pierwszedwaprzykładyzwiększająlicznik,zwracającnowąwartośćcałkowitą,
którajestojedenwiększaodprzekazanejliczbycałkowitej.Trzeciprzykład
robitosamo,alezmieniastan,którymożebyćwspólnydlawielufragmentów
programu.
DenicjafunkcjatakajakincrementCounter,któraniejestopartanazmianie
stanu,jestnazywanafunkcjączystą.Atajejczystośćdajewielekorzyści.Jeśli
naprzykładmamyfunkcjęczystą,którawykonujejakieśkosztowneoblicze-
nia,możemyzoptymalizowaćnaszprogram,wywołująctęfunkcjętylkoraz
iprzechwytującwynikczylistosująctechnikęzwanąmemoizacją.
Czystefunkcjeułatwiająteżanalizęprogramów.Programobiektowytograf
obiektów,gdziekażdymawielemutowalnychstanów.Modykacjastanujed-
negozobiektówmożeprowadzićdomodykacjistanuinnego,którymożesię
znajdowaćwgraewodległościwieluwęzłów.Wprogramie,którymatylko
czystefunkcje,takiedziałanienaodległośćjestniemożliwe.
Tojestuproszczonyopisprogramowaniafunkcyjnego.
Chodzioniemutowalność
Niestety,pełnaczystośćniemasięnajlepiejwświecierzeczywistym.Czyste
funkcjemogądobrzemodelowaćpewnedziedziny,aledoinnychniepasują.
Kompilatorytoczystefunkcje.WyszukiwaniewGoogleniejestczyste.
Praktycznejęzykiprogramowaniafunkcyjnegokładąnacisknaniemutowalność
iczystośćfunkcyjną,alemusząmiećteżmożliwośćmodelowaniazmieniającego
sięświata,któryniezapewniapełnejczystościfunkcji.WjęzykuHaskell,któ-
ryjestzapewnenajbardziejścisłymjęzykiemfunkcyjnym,możnamodelować
zmiany,wykorzystującmonady,zachowującprzytymścisłączystość.
Innejęzykifunkcyjnemająinnetechnikiminimalizowaniaikontrolizmiany
stanu,któreniesątakścisłejaktezHaskela.Clojurenaprzykładużywa
systemuprogramowejpamięcitransakcyjnejwpołączeniuzezbioremtypów
referencyjnychorazbardzosprytnychniemutowalnychstrukturdanych,aby
utrzymaćwysokipoziomczystości,ajedocześniepozwolićprogramistomna
radzeniesobiewzmieniającymsięświecie.