AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Merkwürdiger Source Code? Kann mir das jemand erklären?
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdiger Source Code? Kann mir das jemand erklären?

Ein Thema von mandoki · begonnen am 18. Mär 2007 · letzter Beitrag vom 19. Mär 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#1

Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 00:55
Hallo,
der Titel ist leider nicht sehr aussagekräftig aber ich weiß nicht so recht wie ich das sonst benennen sollte... sorry dafür.

Zu meinem Problem:
Beim testen der Absolute Database Komponente ist mir ein Sourcecode aufgefallen der mich total verwirrt. Es geht hierbei um das Import/Export Tool welches auch im Source-Code beiliegt.

Hier mal einige kurze Ausschnitte (... steht für weiteren Code):
Delphi-Quellcode:
...
function HasVChk(Table: TTable; Field: TField; var VChk: TVChk): boolean;

function ValToStr(VCHK: DBIVCHK; FldType: word): string;
var
  L: longint;
  I: Integer;
  D: Double;
  MyDate: BDE.DBIDATE;
  ...
  ...
und:
Delphi-Quellcode:
...
procedure TImportExportForm.PerformImport;
var
  i, tableCount: Integer;
  tables: TListBox;
  tableName: String;
  PromptOverwrite: Boolean;
  mr: TModalResult;
  Log: String;

procedure AddDefaultMinMaxFieldValues;
var
  VChk: TVChk;
  i: Integer;
  DoRestructureTable: Boolean;
  s: String;
begin
  ABSTable.Open;
  ABSTable.Close;
  ...
  ...

  ...
       Log := Log+s;
     end;
end;

begin
  PromptOverwrite := True;
  IsStopped := False;
  AbsDB.Close;
  ...

  ...
    end;
  end;
end;

var
  Props: CURProps;
  V: VCHKDesc;
  hCur: hDBICur;
  ...
Der Compiler meldet keinen Fehler.
Ist dies einfach nur eine ungewöhnliche (aber erlaubte) Syntax?

(Habe das komplette File für interessierte mal drangehangen...)
Angehängte Dateien
Dateityp: zip umain_248.zip (4,2 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 01:01
Das ist weder ungewöhnlich noch merkwürdig. Das ist einfach eine Nested Function, also eine Funktion innerhalb einer anderen Funktion.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#3

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 01:07
ähm.. ok.. wäre dann das untere beispiel sowas wie nested procedures?
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 01:14
Zitat von mandoki:
Hallo,
der Titel ist leider nicht sehr aussagekräftig aber ich weiß nicht so recht wie ich das sonst benennen sollte... sorry dafür.

Zu meinem Problem:
Beim testen der Absolute Database Komponente ist mir ein Sourcecode aufgefallen der mich total verwirrt. Es geht hierbei um das Import/Export Tool welches auch im Source-Code beiliegt.

Hier mal einige kurze Ausschnitte (... steht für weiteren Code):
Delphi-Quellcode:
...
function HasVChk(Table: TTable; Field: TField; var VChk: TVChk): boolean;

function ValToStr(VCHK: DBIVCHK; FldType: word): string;
var
  L: longint;
  I: Integer;
  D: Double;
  MyDate: BDE.DBIDATE;
  ...
  ...
und:

Der Compiler meldet keinen Fehler.
Ist dies einfach nur eine ungewöhnliche (aber erlaubte) Syntax?

(Habe das komplette File für interessierte mal drangehangen...)
Warum sollte er auch, das sind einfach lokale Prozeduren/Funktionen, d.h. ValToStr gilt wie die Variablen nur innerhalb HasVChk (und stört daher nicht, wenn andere Prozeduren ihr eigenes ValToStr haben).

Muster:
Delphi-Quellcode:
procedure Myprocedure;
var dummy : integer;

  procedure MyLocalProcedure;
  var ldummy : integer;
  begin
  end;

begin
MyLocalProcedure; { geht nur hier von begin bis end }
end;
Natürlich kann eine lokale Prozedur ihrerseits lokale Unterprozeduren haben. Das ist einer der grössten Vorteile von Pascal gegenüber anderen Sprachen und nimmt vieles der Vorteile von OO-Methoden vorweg. Ich benutze das seit 30 Jahren zur Strukturierung von Programmen, aber leider wird das heute aufgrund unverstandener OO-Ideologie abgelehnt oder ist auch überhaupt nicht mehr bekannt - hier im Forum kommen lokale Prozeduren praktisch nicht vor.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#5

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 01:26
Hallo Reinhard,

vielen Dank für deine ausführliche Erklärung.
Das mit den Unterprozeduren war mir bisher nicht bekannt.
Ich glaube ich sollte dahingehend noch mal einiges in der Fachliteratur nachlesen...

Gruß mandoki
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#6

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 08:17
Zu erwähnen sei, daß selbst die nested procedures/functions selber wiederum welche enthalten können.

Und was vorallem wichtig ist, es wird "immer" die letzte Daklaration verwendet ... ist bei Variablen/Typen/Kontanten... genauso.
Delphi-Quellcode:
procedure MyProcedure1;
  begin
    s := IntToStr(123); // ruft IntToStr aus der Unit SysUtils auf
  end;

function IntToStr(i: integer): integer; // >>IntToStr[1]
  begin
    ...
  end;

procedure MyProcedure2;
  begin
    s := IntToStr(123); // ruft die IntToStr[1]
  end;

procedure MyProcedure3;
  function IntToStr(i: integer): integer; // >>IntToStr[2]
    begin
      s := IntToStr(123); // ruft sich selber auf, also IntToStr[2]
    end;

  begin
    s := IntToStr(123); // ruft ebenfalls IntToStr[2] auf
    s := SysUtils.IntToStr(123); // ruft IntToStr aus der Unit SysUtils auf
  end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#7

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 18. Mär 2007, 14:11
Danke für das Beispiel, himitsu.

Da mir die Vorteile aber noch nicht so ganz einleuchteten, hab ich mal gesucht und dieses Thema gefunden.

Gruß mandoki
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 19. Mär 2007, 06:17
@Reinhard

Zitat:
aber leider wird das heute aufgrund unverstandener OO-Ideologie abgelehnt oder ist auch überhaupt nicht mehr bekannt - hier im Forum kommen lokale Prozeduren praktisch nicht vor.
Das stimmt so nicht Gerade hier im Forum findet man viele Beispiele mit nested Functions, zumindestens meine Beispiele
Denn, ich stimme absolut mit deiner Meinung überein, es ist ein in Vergessenheit und unterschätztes Feature, das durch masochistische OOP'ler dummerweise auch noch schlecht geredet wird (obwohl es ja das beste Beispiel für Strukturierung, Modularisierung und Sichtbarkeiskontrolle in der MP ist).

Musste ich mal loswerden

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#9

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 19. Mär 2007, 07:17
*zustimm*

und außerdem ist es verständlicher überall (da wo es verwendet wird) 'ne eigene nested Function zu hinterlegen, als irgendwo tausende (vielleicht noch überladne) funktion zu deponieren, wo dann keiner mehr weiß wozu die eigentlich noch gehörten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#10

Re: Merkwürdiger Source Code? Kann mir das jemand erklären?

  Alt 19. Mär 2007, 07:33
Just my 2 Cents: Ich verwende sowas immer nur sehr Sparsam, bzw. nur an den Stellen, an denen ich mir ziemlich sicher bin, dass ich die Funktion nicht später irgendwo anders doch noch gebrauchen könnte. Denn dann ist meistens Code-Umbauen angesagt und wo im Code umgebaut wird können sich leicht Fehler einschleichen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz