funktio parametrinä

funktiokysyjä

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.

6

73

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Heikki Silvennoinen petti vaimoaan vuosien ajan

      Viiden lapsen isä Heikki kehuu kirjassaan kuinka paljon on pettänyt vaimoaan vuosien varrella.
      Kotimaiset julkkisjuorut
      241
      3744
    2. Miksi ihmeessä nainen seurustelit kanssani joskus

      Olin ruma silloin ja nykyisin vielä rumempi En voi kuin miettiä että miksi Olitko vain rikki edellisestä suhteesta ja ha
      Ikävä
      27
      2274
    3. Taasko se show alkaa

      Koo osottaa taas mieltään
      Ikävä
      24
      2111
    4. Persut nimittivät kummeli-hahmon valtiosihteeriksi!

      Persujen riveistä löytyi taas uusi törkyturpa valtiosihteeriksi! Jutun perusteella järjenjuoksu on kuin sketsihahmolla.
      Perussuomalaiset
      90
      2005
    5. Onko ministeri Juuso epäkelpo ministerin tehtäviensä hoitamiseen?

      Eikö hänellä ole kompetenttia hoitaa sosiaali- ja terveysministetin toimialalle kuuluvia ministerin tehtäviä?
      Perussuomalaiset
      92
      1685
    6. Sakarjan kirjan 6. luku

      Jolla korva on, se kuulkoon. Sain profetian 22.4.2023. Sen sisältö oli seuraava: Suomeen tulee nälänhätä niin, että se
      Profetiat
      24
      1391
    7. Söpö lutunen oot

      Kaipaan aina vaan, vaikkakin sitten yksipuolisesti.
      Ikävä
      8
      1291
    8. Avaa sydämesi mulle

      ❤ ❤❤ Tahdon pelkkää hyvää sulle Sillä ilmeisesti puhumalla Avoimesti välillämme Kaikki taas selviää Kerro kaikki, tahdo
      Ikävä
      36
      1287
    9. Elia tulee vielä

      Johannes Kastaja oli Elia, mutta Jeesus sanoi, että Elia tulee vielä. Malakian kirjan profetia Eliasta toteutuu kokonaan
      Helluntailaisuus
      35
      1227
    10. Nellietä Emmaa ja Amandaa stressaa

      Ukkii minnuu Emmaa ja Amandaa stressaa ihan sikana joten voidaanko me koko kolmikko hypätä ukin kainaloon ja syleilyyn k
      Isovanhempien jutut
      6
      1218
    Aihe