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

182

    Vastaukset 6

    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. Kuollut teini Kajaanissa

      Kuulemma sellaista huhua liikkeessä?
      Kajaani
      6
      1221
    2. Perhoseni (miehelle)

      Miksi et usko, että mun rakkaus sinuun on aitoa ja vilpitöntä? Tai että se oli jo silloin? Miksi ajattelet, ettet ole r
      Ikävä
      165
      1027
    3. Totta on asia. Jeffrey Cohen on jättänyt Sofian.

      Vaimon viesti on paljastanut totuuden.
      Kotimaiset julkkisjuorut
      216
      803
    4. Halaus juuri sinulle

      Kaikki järjestyy kyllä. Luota vain. ❤️🫶
      Ikävä
      63
      758
    5. Uskallatko paljastaa

      Millä nimellä löydyn puhelimestasi?
      Ikävä
      66
      744
    6. Uskaltaisitko

      Tavata kaivattusi tässä tilanteessa?
      Ikävä
      67
      666
    7. Mies, näetkö minut myös

      Seksuaalisena ihmisenä ja naisena? Haluatko minua seksuaalisesti? Vai olenko mielestäsi tyttönen?
      Ikävä
      22
      646
    8. Nainen, mitä mieltä olet kodittomista?

      Ja heistä jotka eivät kykene huolehtimaan asioistaan, itsestään eikä terveydestään? Miten heidän kanssaan tulisi toimia?
      Ikävä
      136
      631
    9. Kuinkahan monen

      Naisen puolisoa olet nainen vikitellyt ja eron aiheuttanut? Toivottavasti karma on ku*sut muroihisi useamman kuin kerran
      Ikävä
      66
      599
    10. Voiko se ikinä toimia

      Voiko meistä ikinä tulla mitään? Näin kauan aikaa on kulunut ja mitään ei tapahdu... En usko, että sinä mietit minua het
      Ikävä
      32
      568
    11. Meneekö unohtamis

      Projektisi hyvin??
      Ikävä
      34
      547
    12. Voin tulla

      Sisustamaan sulle 🤭
      Ikävä
      55
      528
    13. 51
      522
    14. Mitä sä haluat vanhus?

      🤣🤣🤣🤣🤣
      Ikävä
      47
      495
    15. Anteeksi mies

      En jaksa tätä…, en halua, että sinulla on paha mieli tämän takia. Viestiä Sinulle.
      Ikävä
      40
      483
    16. Mies, kumman ottaisit mieluummin

      176 cm vai 154 cm naisen, jos molemmat muuten yhtä viehättäviä? Mikä on oma pituutesi?
      Sinkut
      98
      476
    17. Laittaisit viestin suoraan!!

      Haluaisin...
      Ikävä
      30
      473
    18. Eikö olisi mukavaa

      Jakaa arki yhdessä mies. Tämmöisin aatoksin.
      Ikävä
      37
      468
    19. Tekisi mieli vetäistä kunnon jurrit sinun kanssasi

      Ja keskustella asiat, ei tästä tule hevonvttua.
      Ikävä
      40
      463
    20. Kerro mies tarinasi

      Miksi kaikki meni niinkuin meni? Haluaisin vieläkin ymmärtää. Tuskin saan vastausta häneltä, koska etsin aavikolta juuri
      Ikävä
      18
      440
    Aihe