[Hejmen]Funkciaj Lingvoj

Hejmpaĝo | Lastaj Ŝanĝoj | Preferoj | Uzu X-Sistemon

Funkciaj lingvoj estas speco de komputillingvoj kiuj havas apartan programadan stilon ol [ordonemaj lingvoj]?. Kontraste kun ordonemaj programoj kiuj estas sekvencoj de ordonoj por plenumi unu post la alia, funckia programo estas unuopa esprimo (aŭ formulo), kiun oni plenumas per komputi la esprimon.

Do ne estu surprizo ke funckiaj lingvoj estas bazitaj de matekatiko?. Ekzemple, la funkciaj lingvoj Haskell kaj Lisp baziĝas de la Lambdokalkulo?. Kaj tio bazo estas utila por tradukiloj kiuj povas matematike rezoni pri la programo por pli inteligente traduki ĝin ol tradukiloj kutime povas 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

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

Enkonduko al funkciaj lingvoj

Iuj kiuj uzis sterntabelon? jam spertas pri funkcia programado. En sterntabelo, oni specifas la valorojn de ĉiu ĉelo laŭ la valoroj de aliaj ĉeloj. La celo estas kio estas komputota, ne kiel komputi ĝin. Ekzemple: oni ne specifas la ordon laŭ kiu la ĉeloj estu komputitaj; anstataŭe, ni 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, ni atendas ke ĝi montros al ni senfina tabulo da ĉeloj kaj asignos nur la memorn necesan por tiuj ĉeloj uzitaj. Plejparte, oni specifas la valoron de ĉelo per esprimo (kies subpartoj povas esti komputitaj laŭ ajna ordo), anstataŭ sekvenco 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 funckiaj komputillingvoj.

Alia bone konata preskaŭ funckia lingvo estas la [[norma datumbaz-demanda lingvo]] (SQL). Demando en SQL estas esprimo kun projekcioj, selektoj, 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 ordro. Realigoj de SQL ofte amplekse optimigas la demandojn, kiu, inter aliaj aferoj, determinas la plej bona ordo laŭ kiu komputi la esprimon.

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

Kio estas la avantaĝoj de funkcia programado?

Mallongeco: Funckiaj programoj emas esti pli koncizaj ol ordonemaj.

Facileco de kompreno: Funkciaj programoj ofte estas pli facilaj kompreni. Tio povas esti bone por serĉi problemojn en la programo. Tio povas esti bone 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 rezultas je 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 funckii por multaj tipoj, sen necesi apartan definon por la ĉiuj tipoj.

Abtrakteco: Per funckiaj lingvoj la programisto povas esprimi la plej altnivela algoritmo sen tro zorgi pri la detaloj. Kaj funkciaj lingvoj estas [modulemaj lingvoj]? kaj tial estas facile apartigi la sendependajn partojn de la programo por plibone 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 modulema stilo, per kio oni povas krei iom malŝparemajn (sed pli simplajn kaj pli ĝeneralajn) modulojn, sed la aldona laboro ne efektiviĝus.

Enkonstruita memor-direktado: En lingvoj kiel C?, la programisto respondecas pri la asignado de memoro. En funkciaj lingvoj, tiuj decidoj 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, kiel C, estas pli taŭgaj.


Hejmpaĝo | Lastaj Ŝanĝoj | Preferoj | Uzu X-Sistemon
Eblas nur legi tiun ĉi paĝon | Vidu aliajn reviziojn
Laste redaktita March 26, 2002 7:51 am by Jacob SCHWARTZ (diferencoj)
Serĉu: