Funkciaj lingvoj estas speco de komputillingvoj, kiuj havas apartan programadan stilon kompare al ordonemaj lingvoj. Kontraste kun ordonemaj programoj, kiuj estas vicoj de ordonoj plenumendaj unu post la alia, funkcia programo estas unuopa esprimo (aŭ formulo), kiun oni plenumas per komputi la esprimon.

Do ne estu surprizo, ke funkciaj lingvoj estas bazitaj de matematiko. Ekzemple, la funkciaj lingvoj Haskell kaj Lisp baziĝas sur la Lambdokalkulo. Kaj tiu bazo estas utila por tradukiloj, kiuj povas matematike rezoni pri la programo por pli inteligente traduki ĝin ol kutime povas tradukiloj por ordonemaj lingvoj. Kutima funkcio plenumita de tradukiloj por funkciaj lingvoj estas kontroli erarojn. Funkciaj lingvoj pli facile ebligas la trovadon de eraroj antaŭ ol ruli la programon. Do multaj rultempaj eraroj en ordonemaj programoj estas malpli seriozaj traduktempaj eraroj en funkciaj lingvoj.

Ekzemploj redakti

Lisp, Scheme, Haskell, ML, Caml, Clean, Erlang, Elm

Enkonduko al funkciaj lingvoj redakti

Iuj, kiuj uzis sterntabelon, jam spertas pri funkcia programado. En sterntabelo oni specifas la valorojn de ĉiu ĉelo laŭ la valoroj de aliaj ĉeloj. Gravas, kio estas komputota, ne kiel komputi ĝin. Ekzemple: oni ne specifas la ordon, laŭ kiu la ĉeloj estu komputitaj; anstataŭe, oni akceptas, ke la sterntabelo komputos la ĉelojn laŭ la ordo, kiu respektas la dependecojn inter la ĉeloj. Oni ne specifas, kiel la sterntabulo asignu memoron; anstataŭe, oni atendas, ke ĝi montru al ni senliman tabulon da ĉeloj kaj asignu nur la memoron necesan por la ĉeloj uzataj. Plejparte, oni specifas la valoron de ĉelo per esprimo (kies subpartoj povas esti komputitaj laŭ ajna ordo), anstataŭ vico de ordonoj.

Interesa rezulto de la nespecifita ordo de kalkulado estas, ke la koncepto de valorizo estas ne utila. Tio forte kontrastas kun tradiciaj ordonemaj lingvoj, en kiuj valorizo estas esenca koncepto kaj en kiuj la ordo de la ordonoj estas gravega al la signifo de la programo.

La celo al la altnivela "kio" anstataŭ malaltnivela "kiel" estas distingaĵo de funkciaj komputillingvoj.

Alia bone konata preskaŭ-funkcia lingvo estas la norma datumbaz-demanda lingvo (SQL). Demando en SQL estas esprimo kun projekcioj, elektoj, kunigoj, ktp. La demando specifas, kiu rilato estu komputita, sen specifi, kiel ĝi estu komputita. Tiu eco de la demando permesas, ke ĝi povas esti komputita laŭ iu ajn konvena ordo. Realigoj de SQL ofte amplekse optimumigas la demandojn, determinante, inter aliaj aferoj, la plej bonan ordon laŭ kiu komputi la esprimon.

Sterntabuloj kaj SQL estas tre specialigitaj lingvoj. Veraj funkciaj lingvoj prenas la samajn ideojn kaj translokas ilin al la nivelo de ĝeneralcela programado.

Kio estas la avantaĝoj de funkcia programado? redakti

Mallongeco: Funkciaj programoj emas esti pli koncizaj ol ordonemaj.

Facileco de kompreno: Funkciaj programoj ofte estas pli facile kompreneblaj. Tio povas esti bona por serĉi problemojn en la programo. Tio povas esti bona ankaŭ por projektoj, se novaj homoj devas legi aŭ ŝanĝi ion en programo ne originale verkita de ili, aŭ se la originala aŭtoro forlasis la programon kaj post longe volas mem reveni kaj facile rememori, kion li verkis.

Neniu nekropsio: La plej multaj funkciaj lingvoj estas tipizemaj lingvoj. Tipkontrolado ĉe traduktempo nuligas grandan aron de tiperaroj, kiuj kondukas al rultempa halto de la programo. Simple ne eblas en tipizemaj lingvoj, ekzemple, trakti entjeron kiel referencon.

Reuzado de programpecoj: Funkciaj lingvoj ofte enhavas homonimigon de operacisimboloj. Tiel la sama funkcio povas funkcii por multaj tipoj, sen neceso de aparta difino por ĉiuj tipoj.

Abstrakteco: Per funkciaj lingvoj la programisto povas esprimi la plej altnivelan algoritmon sen tro zorgi pri la detaloj. Kaj funkciaj lingvoj estas blokemaj lingvoj kaj tial estas facile apartigi la sendependajn partojn de la programo por pli bone rezoni pri la unuopaj partoj, sen esti konfuzita per la interfunkciado de la tuto.

Nur tiom kiom necesas: Funkciaj lingvoj povas esti nestriktaj. Tio signifas, ke la komputilo komputas nur tiom, kiom necesas por atingi la rezulton de la programo. Kaj tio permesas pli blokecan stilon, per kiu oni povas krei iom malŝparemajn (sed pli simplajn kaj pli ĝeneralajn) blokojn, sed la aldona laboro ne efektiviĝus.

Enkonstruita memor-direktado: En lingvoj kia C (programlingvo), la programisto respondecas pri la asignado de memoro. En funkciaj lingvoj, tiujn decidojn prizorgas la tradukilo kaj la rultemp-sistemo.

Tiu ĉi listo ne celas konvinki la leganton, ke funkciaj programoj estas ĉiam la plej taŭgaj lingvoj. Povas esti situacioj, kiam aliaj lingvoj, kia C, estas pli taŭgaj.