Pascalissa on mahdollista antaa esim. funktiolle parametrinä funktio.
Olisi kiinnostavaa tietää mihin näitä oikeasti käytetään?
Alla jonkunlainen toimiva testikoodi
-----8<-----
unit Unit1;
{$mode objfpc}{$H }
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
RadioGroup1: TRadioGroup;
UpDown1: TUpDown;
UpDown2: TUpDown;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type
TFuncTwoArgsDouble = function(x,y: double): double;
var
Form1: TForm1;
implementation
{$R *.lfm}
function summa(x,y:double):double;
begin
result := x y;
end;
function kerto(x,y:double):double;
begin
result := x * y;
end;
function lasku(x,y:double; funktio:TFuncTwoArgsDouble):double;
begin
result := funktio(x,y);
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
tulos:double;
begin
if RadioGroup1.ItemIndex = 1 then
tulos := lasku( Strtoint(Edit1.text), StrtoInt(edit2.text),@kerto )
else tulos := lasku( Strtoint(Edit1.text), StrtoInt(edit2.text),@summa );
Memo1.Lines.Add(FloatToStr(tulos));
end;
end.
funktio parametrinä
6
155
Vastaukset
- hieno_esimerkki
Eikös tuo ole ihan normi olio-ohjelmointia ilman olio-ominaisuuksien käyttöä? Jos haluat todellista funktionaalista ohjelmointia, niin tutustu lisp:iin.
Mutta vastaukseen: Ihan oikeasti noita voi käyttää vaikkapa käyttöjärjestelmäkutsujen luomiseen - olettaen että system-kirjasto ei jotain ominaisuutta tue. Tällöin kutsuttu funktio voi olla vaikkapa 2 kpl eri tavalla määriteltyä kirjoitinporttia, moodit, EPP/ECP/SPP, sarjaporttitoiminta, tila, jne. tiedostava pätkä. Eli esimerkki embed. maailmasta.- jyytyä
Jos tarvii korvata olio-ohjelmointia niin lisään tavalliseen aliohjelmakutsuun
yhden parametrin lisää joka kertoo mikä "olio" on kyseessä.
- ex-delphisti
Itse aloitin Delphi 2 versiolla Windows koodailut aikoinaan, harrastuksena. Sitten työkseni koodailin Delphi 2006 versiolla 5,5 vuotta. Nykyisin Windowsista luovuttua uusi suosikkikieleni on Vala, tämä siis harrastuksena, työkseni koodailen webbihommeleita Linux-pohjaisella palvelimella.
Valassa on anonyymi funktio, tässä on erona se että esittelet vain funktion, mahdollisen paluutyypin ja argumentit, mutta funktion toiminnallisuuden voit toteuttaa (osoittaa) tapauskohtaisesti.
public delegate double TFuncTwoArgsDouble(double x, double y);
public class TForm {
....public unowned TFuncTwoArgsDouble summa { public get; private set; }
....public unowned TFuncTwoArgsDouble kerto { public get; private set; }
....public unowned TFuncTwoArgsDouble jako { public get; private set; }
....public TForm() {
........this.summa = (x, y) => {
............return x y;
........};
........this.kerto = (x, y) => {
............return x * y;
........};
........this.jako = null; // toteutetaan jossain muualla
....}
....public double testi_summa(double x, double y) {
........return this.summa(x, y);
....}
....public double testi_kerto(double x, double y) {
........return this.kerto(x, y);
....}
} - Vittu-sä-oot-niin-ruma
Ettekö te saatana osaa vasta kysymykseen, kaikki ketjun vastaukset on perseestä. Miksi ne on tänne kirjoitettu. Kukaan vastaajista ei näköjään osaa DELPHIllä yhtään mitään.
Kaveri kysyy: Mihin funktioita käytetään?
M-Kar on tainnut kirjoitella kaikki tyhjän päiväiset vastaukset, yleissivistävän tieto tasollaan. Vastauksista näkee ettei vastaajat tunne DELHI ohjelmointi käytännössä ollenkaan.
Kysymys jo sinäänsä kielii että kysyjän ohjelmointi tuntemus jo ihan yleisellä tasollakin on alkeista lähtien epäselvää. Ymmärrettävän vastauksen antaminen venyisi pitkäksi ja lyhyt tiivistys ei paikkaa kysyjän tieto taitoa siinä määrin että siitä olisi ohjelmoinin kannalta merkitystä.
Funktioita, voidaan käyttää tietojen analysoimiseen saate parametrien, staattisten ja klobaalien ehtojen perusteella. Ei, ei onnistu tuo tiivis -vastaus, tuommosena ihan turha, joten veikkaan että kaveri ei tule saamaan tyhjentävää vastausta.- AaronDelphin
Delphissä yleisempiä:
procedure Button1Click(Sender: TObject);
TNotifyEvent = procedure(Sender: TObject) of object;
mutta tosiaan, sama ilman objekteja/luokkia:
TPlainEvent = procedure(Sender: TObject);
proseduuri/funtioparametrit ovat joskus hyödyllisiä: niiden avulla voi sama koodi kutsua eri aliohjelmaa eri tilanteissa, kun aliohjelmaviite onkin muuttuja (ns. proseduraalinen / funktionaalinen tyyppi).
tuo "4 eri laskutoimitusta" on hyvä esimerkki, käytännön sovellukset toki riippuvat siitä, mitä tarkalleen halutaan saada aikaan.
- humburker
https://www.cs.helsinki.fi/u/jplindst/c/funktio.html
https://fi.wikipedia.org/wiki/Funktionaalinen_ohjelmointi
https://www.google.fi/search?q=funktioiden käyttö ohjelmoinnissa&ie=utf-8&oe=utf-8&client=ubuntu&channel=fs&gfe_rd=cr&ei=9YV7V6b_K-6A8Qfx0quoCw&gws_rd=ssl
"Kentän tulee sisältää muutakin kuin linkkejä" :--)
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 2034266
SDP haluaa 40 000 nettomaahanmuuttajaa
SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah1463798Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen
No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat1373261Hienoa! Eduskunta luopui käteisen käytöstä
Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.521638Ikävä sinua mies
Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i191538Mikä tämä henkilö mahtaa touhuta Parkanossa
Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58341490Sulla on avaimet ja keinot
Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi251395Orpo loukkaantui fasismiin viittaavasta sanavalinnasta
Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk271351Kiinnostaa - ei kiinnosta - kiinnostaapas
Selittäkää hämmentyneelle miksi miehiä ei ikinä kiinnosta silloin, kun sitä olisi itsekin kiinnostunut? Sitten kun siirt1171165Martina haluaa Marbellaan
Martinan tekisi mieli ottaa lennot Marbellaan, jossa näkisisi kauniita ja hyväntuulisia ihmisiä. No sitten pitää matkust2151063