Programmierung mit einer Funktion

8

Ich habe eine Funktion, die eine Ganzzahl zurückgibt. Ich möchte sie jedoch erweitern, um ihr einen neuen Parameter hinzuzufügen. Mit diesem Parameter müsste die Funktion jedoch ein Array zurückgeben.

  • Ist es eine schlechte Übung, eine Funktion zu haben, die entweder ein Array oder eine ganze Zahl basierend auf einem Parameter?
  • zurückgibt?
  • Wenn ja, wie kann ich das lösen?

Ich denke, es wäre auch eine schlechte Übung, die gesamte Funktion nur für 4-5 zusätzliche Zeilen zu kopieren und einzufügen.

    
luqita 22.08.2011, 18:09
quelle

5 Antworten

6

Wenn möglich, würde ich eine Funktion aus einer anderen heraus aufrufen.

%Vor%

Für die Funktion, die Sie im Sinn haben, ist dies möglicherweise nicht möglich, aber es könnte eine gute Option sein.

Als zusätzliche Anmerkung, da die Funktionen miteinander verwandt sind, würde ich sie als Klassenmethoden schreiben, um sie zusammen zu gruppieren.

Nimm Users zum Beispiel; Ich brauche möglicherweise eine Funktion, um einen einzelnen Benutzer zu erhalten, und eine andere, um mehrere Benutzer zu erhalten. Es ist sinnvoll, diese Methoden in einer Klasse zu sammeln:

%Vor%     
adlawson 22.08.2011, 18:18
quelle
2

In PHP würde ich sagen "eine Funktion ein Ausgabetyp." (mit Ausnahme des Wertes FALSE , der in PHP eine besondere Bedeutung hat). Wenn PHP das Überladen unterstützt, könnte das anders sein, tut es aber nicht. Aber hier ist eine Frage, warum nicht einfach eine Funktion haben, die beide Funktionen umhüllen?

%Vor%     
cwallenpoole 22.08.2011 18:18
quelle
2

Meiner Meinung nach ist es eine schlechte Übung, da es Probleme beim Arbeiten verursachen könnte, weil Sie nicht immer wissen werden, ob Sie von Ihrer Funktion ein int oder ein Array erhalten.

Mein Vorschlag

Gibt immer ein Array zurück (auch wenn es ein Element lang ist) und hat eine allgemeinere Funktion, die leicht zu handhaben ist.

    
Madara Uchiha 22.08.2011 18:17
quelle
0

Ich bin dagegen, Dinge als ein Array zurückzugeben, wenn Ihre Funktion mehr als einen Wert ändert, dann ist wahrscheinlich die von Ihnen geschriebene Funktion nicht die richtige und möglicherweise müssen Sie zwei Funktionen für dasselbe haben Grund für diesen sauberen und wartbaren Code und morgen muss eine neue Person nicht gehen und sich fragen, was das passiert, nachdem sie gesagt hat, dass es Fälle gibt, in denen Sie mehr als ein Argument modifizieren müssen. In diesem Fall nehmen Sie einen Anruf, um zu sehen, was die Methode macht und geben Sie den richtigen Wert und das andere Tal übergeben Sie es als Referenz und bearbeiten Sie es.

Hier ist ein Beispiel der Weitergabe durch Referenz ..

%Vor%     
Baz1nga 22.08.2011 18:22
quelle
0

Sie nennen hier einige Prinzipien:

  1. Make Funktionsparameter haben eine Bedeutung (und funktioniert idealerweise Null-Parameter, vermeiden Sie mehr um jeden Preis möglich).
  2. Machen Sie eine Funktion nur für eine Sache.
  3. Wiederhole dich nicht.

Ich denke, all diese drei sind gültig. Deine Fragen klingen wie ein Trade zwischen 3. und 2. oder 1. Ich denke du solltest sie nicht gegeneinander tauschen.

Sie haben nicht viel darüber erzählt, was Sie mit dieser Funktion erreichen wollen, also völlig abstrahiert, ich kann die folgenden Pfade sehen:

  1. Sie stehen vor einem Designproblem. Redesign und Refactoring Ihres Codes.

Hmm, klingt ein bisschen nach cleverem Sprechen, aber ehrlich gesagt, Sie könnten Iteratoren entweder nicht richtig verwenden (foreach) oder Sie fangen an, eine "one function do it all" -Funktion zu erstellen, die Sie nicht sollten. Das wird den Code am Ende duplizieren.

    
hakre 22.08.2011 18:22
quelle

Tags und Links