AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Frage zu proceduren innerhalb anderer proceduren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu proceduren innerhalb anderer proceduren

Ein Thema von Gebhard · begonnen am 29. Mär 2010 · letzter Beitrag vom 29. Mär 2010
Antwort Antwort
Gebhard

Registriert seit: 28. Nov 2005
42 Beiträge
 
Delphi 7 Personal
 
#1

Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 11:00
Hallo,

beim lesen verschiedener Beispiele sehe ich manchmal, dass sich innerhalb von proceduren andere proceduren befinden Beispiel
beliebiges Beispiel aus diem Forum. In diesem Beispiel befindet sich innerhalb der Procedure "SetClipboardText" die Procedure "SetBuffer".
Habe ich hier etwas falsch gelesen und wenn nicht, welchen Sinn macht diese Vorgehensweise?

Vielen Dank für Eure Antwort

Gruß

Gebhard
Olli
  Mit Zitat antworten Zitat
Willmar.Heinrich

Registriert seit: 20. Apr 2009
Ort: Erfurt
38 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 11:07
In dem zitierten Beispiel sehe ich es im Sinne einer besseren Lesbarkeit der Quellcodes.

Gruß, Willmar
Willmar
Viele Grüße, Willmar
  Mit Zitat antworten Zitat
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 11:10
Zitat von Gebhard:
Habe ich hier etwas falsch gelesen und wenn nicht, welchen Sinn macht diese Vorgehensweise?
Nein, das hast Du völlig richtig verstanden. Der obere Block ist eine lokale Prozedur, welcher nur im Gültigkeitsbereich der Hauptprozedur bekannt ist. Und auch nur dort aufgerufen werden kann.

Eingesetzt wird dieses Verfahren, wie auch schon Willmar anmerkte, hauptsächlich um die Lesbarkeit des Quellcodes zu erhöhen. Viele kleine lokale Prozeduren oder Funktionen, von denen jede nur einen Teil der Aufgabe erledigt und innerhalb der Hauptprozedur eine Aneinanderreihung derselben. Die Unterfunktionen/-prozeduren sollten dabei aber sehr speziell sein und nur an dieser Stelle Verwendung finden können. Sobald man Teile mehrfach verwenden kann, sollten diese Teil z.B. des Private-Teils der Klasse sein.

In dem von Dir angeführten Beispiel erschliesst sich wegen dem einzeiligen Aufruf der Unterprozedur der Sinn allerdings nur sehr begrenzt
Carsten
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 11:14
Der Spaß nennt sich "nested procedure" (können aber genau so gut functions sein), und ist eigentlich eher als Relikt zu betrachten, auch wenn der eine oder andere durchaus Argumente für die Benutzung im Einzelfall anbringen dürfte.
Letztlich geht es nur darum, Code der in der Mutter-Funktion/Prozedur sonst mehrfach geschrieben werden müsste, auszulagern. Diese nested procedures sind ausserhalb der Mutter-Funktion nicht sichtbar, und sie können zudem auf die lokalen Variablen der Mutter-Funktion zugreifen - was auch gleich schon ein Argument gegen ihre Verwendung ist, da dies extrem unübersichtlich/-erwartet sein kann.

Heutzutage, im Zeitalter von Klassen und Co, ist sowas eher über ganz normale private Methoden vorzuziehen. Dann können zwar andere Methoden der Klasse diese auch sehen, aber das tut keinem Weh, und man spart sich ggf. Umbauten wenn man diese Unterfunktion doch noch an anderer Stelle in der Klasse brauchen könnte.

Es gibt halt so eine halbe Hand voll Spezialfälle wo diese Dinger echt komfortsteigernd sind, aber im Großen und ganzen mindern sie eher die Lesbarkeit im Vergleich zu der Alternative.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 11:36
Zitat von Medium:
"nested procedure"
Also für kleine Dinge und vorallem bei Prozeduren/Funktionen, welche nicht in Klassen verpackt sind, nutze ich auch gern sowas.
Denn wie gesagt, kann man so vorallem leichter erkennen, wozu sie gehören, ohne gleich alles mit Kommentaren vollstopfen zu müssen.

Und gerade der Vorteil auf Parameter und lokale Variablen zugreifen zu können ist ein großer Vorteil.
Gut, hier muß man aufpassen und darum werden (bei mir) solche Variablen vor den "nested procedures" deklariert und die Restlichen danach.
Immerhin kann man so auch einiges Einsparen und übersichtlicher machen, wenn man dieses mit Bedacht einsetzt.

PS: Wie hießen nochmal diese "neumodischen" Funktionen, welche man mitten im QuellCode deklarieren kann?
irgendwie so
Delphi-Quellcode:
SL.Sort(function(a, b: irgendwas)
  begin Result := Vergleiche(a, b); end);
Und jetzt erkläre mir mal jemand, warum dann diese extremen "nested procedures" so toll sind
und was an den einfachen "nested procedures" soooooo schlimm sei?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Gebhard

Registriert seit: 28. Nov 2005
42 Beiträge
 
Delphi 7 Personal
 
#6

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 12:00
Hallo,

vielen Dank für Eure Antworten.

Tschüss und schöne Ostern

Gebhard
Olli
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 14:10
Zitat von himitsu:
[...] Prozeduren/Funktionen, welche nicht in Klassen verpackt sind
Sind, zumindest wenn man sich in Objekt orientierter Umgebung bewegt, von vorn herein schon als Designfehler anzusehen.

Zitat:
Denn wie gesagt, kann man so vorallem leichter erkennen, wozu sie gehören, ohne gleich alles mit Kommentaren vollstopfen zu müssen.
Ich schreib meine Helferlein deswegen ganz gern direkt vor oder hinter die "Benutzer-Methoden", und moderne IDEs machen's einem ohnehin sehr leicht vom Aufruf zur Implementierung zu hüpfen, ohne auch nur eine Zeile scrollen zu müssen.

Zitat:
Und gerade der Vorteil auf Parameter und lokale Variablen zugreifen zu können ist ein großer Vorteil.
Gut, hier muß man aufpassen und darum werden (bei mir) solche Variablen vor den "nested procedures" deklariert und die Restlichen danach.
Und wenn dann die nested Procedure länger als der sichtbare Ausschnitt wird, ist die Verwirrung perfekt.

Zitat:
Immerhin kann man so auch einiges Einsparen und übersichtlicher machen, wenn man dieses mit Bedacht einsetzt.
Einsparen, ja, aber es ist dabei im Potential gleichwertig mit normalen Methoden. Übersichtlich: Nur wenn man 1-2 Drei- bis Vierzeiler so kapselt - und dabei nicht wild in übergeordneten Variablen doktort. Das ist in Zeiten von automatischem Inlining nicht einmal mehr ein Performanceargument, und im Grunde kann man sogar eine sehr ähnliche Argumentation dagegen führen, die man gegen globale Variablen ansetzt.


Zitat:
PS: Wie hießen nochmal diese "neumodischen" Funktionen, welche man mitten im QuellCode deklarieren kann?
Anonyme Methoden. Sobald man diese für mehr als Einzeiler einsetzt, gehört man genau so an die Wand gestellt

Zitat:
Und jetzt erkläre mir mal jemand, warum dann diese extremen "nested procedures" so toll sind
und was an den einfachen "nested procedures" soooooo schlimm sei?
Teil 1 sollte beantwortet sein, Teil 2 eigentlich auch. Aber weil du es bist: Weil es in 99,9% der Fälle zu zusätzlicher Verwirrung führt. Insbesondere wenn es mal nicht der eigene Code ist, oder man ihn ein paar Jährchen nicht mehr im Sinn hatte. Und joa, ich spreche dabei aus leidvoller Erfahrung
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Frage zu proceduren innerhalb anderer proceduren

  Alt 29. Mär 2010, 14:36
Zitat von Medium:
Und wenn dann die nested Procedure länger als der sichtbare Ausschnitt wird, ist die Verwirrung perfekt.
Dafür hab ich meine Codeformatierung:

"normale" Prozeduren, Funtionen und Methoden liegen auf einer oberen Ebene (haben also 2 Leerzeichen davor)

die "nested" Proceduren liegen eine Ebene tiefer ... unterhalb der Elern-Prozedur (haben also 4 Leerzeichen davor und das nahfolgende BEGIN auf gleicher Höhe wäre dann der Beginn der Elternprozedur)


Aber OK, längere Prozeduren lagere ich inzwischen auch immer öfters aus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:06 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