Frage

Ich habe vor kurzem mit jemand anderem Code gearbeitet, und ich erkannte, dass diese Person eine ganz andere Philosophie in Bezug auf private Variablen und Methodenparameter hat als ich. Ich in der Regel das Gefühl, dass die privaten Variablen sollten nur in einem Fall verwendet werden, wenn:

  1. muss die Variable später für späteren Abruf gespeichert werden.
  2. Die in den Variablen gespeicherten Daten werden global in der Klasse verwendet werden.
  3. Wenn die Variable global manipuliert werden muss (etwas entschieden unterscheidet sich von der Notwendigkeit, die Variable von jeder Klassenmethode lesen).
  4. Wann wird es die Programmierung wesentlich einfacher. (Zugegeben vage, aber man hat in vielen Fällen sein, sich in eine Ecke zu vermeiden Malerei).

(Ich gebe zu, dass viele der oben genannten sind etwas eintönig, aber sie scheinen jeweils unterschiedlich genug, um Verdienst einer solchen Behandlung ...)
Es scheint nur, dass dies die effizienteste Mittel zur Verhinderung ist eine Variable, die durch Unfall zu verändern. Es scheint auch, wie diese Standards folgenden wird für die spätere Manipulation von externen Referenzen erlauben (wenn die Klasse schließlich modifiziert wird), so dass Sie mit weiteren Optionen in der Zukunft zu verlassen. Ist das einfach ein Stil Problem (wie eine wahre Klammer oder ungarischen Namenskonventionen), oder muss ich Rechtfertigung in diesem Glauben? Gibt es eigentlich eine bewährte Methode in diesem Fall?

Bearbeiten
Ich denke, das korrigiert werden muss. Ich habe „global“ oben, wo ich eigentlich gemeint, „global von Instanz-Methoden“ nicht „global zugänglich durch alles, überall“.
edit2
Ein Beispiel wurde gefragt:

class foo
{
    private $_my_private_variable;

    public function __constructor__()
    {
     }

    public function useFoo( $variable )
    {
        // This is the line I am wondering about,
        // there does not seem to be a need for storing it.
        $this->_my_private_variable = $variable; 
        $this->_doSometing();
    }

    private function _doSomething()
    {

        /*
          do something with $this->_my_private_variable.
        */
        // This is the only place _my_private_variable is used.
        echo $this->_my_private_variable;
    }
}

Das ist die Art, wie ich es getan hätte:

class foo
{

    public function __constructor__()
    {
     }

    public function useFoo( $variable )
    {
        $this->_doSometing( $variable );
    }

    private function _doSomething( $passed_variable )
    {
        /*
          do something with the parameter.
        */
        echo $passed_variable;
    }
}
War es hilfreich?

Lösung

Im Allgemeinen Klasse Mitglieder repräsentieren sollten Staat des Klassenobjekts.

Sie sind nicht nur vorübergehend Standorte für Methodenparameter (das ist, was für Methodenparameter sind).

Andere Tipps

Ich behaupte, dass es nicht ein Stil Problem ist, sondern ein Lesbarkeit / Wartbarkeit Problem. Eine Variable soll eine Verwendung hat, und eine Verwendung nur. „Recycling“ Variablen für verschiedene Zwecke, nur weil sie die gleiche Art verlangen passieren keinen Sinn machen.

Aus Ihrer Beschreibung klingt es, als ob die andere Person Code Sie gearbeitet tut genau dies, da alle anderen Verwendungen grundsätzlich von der Liste abgedeckt sind. Einfach gesagt, verwendet es private Membervariablen als Provisorien wirken je nach Situation. Habe ich Recht, dies zu übernehmen? Wenn ja, wird der Code ist schrecklich.

Je kleiner der lexikalischen Gültigkeitsbereich und Lebensdauer einer bestimmten Variablen, die weniger Möglichkeit einer fehlerhaften Gebrauch und die besser für die Ressourcen Verfügung.

eine Membervariable zu haben bedeutet, dass es Zustand wird halten, die zwischen Methodenaufrufen gehalten werden muss. Wenn der Wert muss nicht zwischen den Anrufen leben es keinen Grund hat, außerhalb des Geltungsbereichs eines einzigen Anruf existieren, und damit (wenn sie überhaupt vorhanden) sollte sich eine Variable innerhalb des Verfahrens sein.

Der Stil ist immer ein harter, sobald Sie ein entwickeln Sie ein wenig in einer Furche stecken können, und es kann schwierig sein, zu sehen, warum das, was Sie tun, nicht der beste Weg sein kann.

Sie sollten nur Variablen erstellen, wann und wo sie gebraucht werden, und über sie verfügen, wenn Sie fertig sind. Wenn die Klasse funktioniert nicht über eine Klassenstufe Variable benötigt, dann ist es einfach nicht brauchen. Erstellen von Variablen, wo man sie nicht braucht, ist sehr schlechte Praxis.

Die Schüler sollten eine der folgenden sein:

  • Eine Abhängigkeit von einer Klasse
  • Eine Variable, die den Zustand der Klasse
  • steht
  • Ein Verfahren der Klasse

Ich bin mir nicht sicher, dass es eine Best-Practice angegeben ist weltweit scoped Variablen für die Verwendung im Vergleich zu immer als Methodenparameter übergibt. (Mit "privaten Variablen", ich nehme an, Sie global scoped Variablen bedeuten.)

eine global scoped Variable ist der einzige Weg Eigenschaften in .NET zu implementieren (auch automatische Eigenschaften verwenden, letztlich eine global variable scoped, nur nicht von Ihnen selbst zu erklären haben).

Es gibt eine Reihe von arguement für immer Methodenparameter verwenden, weil sie es ganz klar macht, wo der Wert herkommt. Ich glaube nicht, es hilft wirklich, das Verfahren zu verhindern, dass Änderungen an den zugrunde liegenden Wert zu machen, und es kann, meiner Meinung nach, die Dinge schwieriger, manchmal zu lesen.

Ich würde nicht einverstanden mit ihm für den weltweiten Zugang Implementierung oder Programmierung zu erleichtern. Durch Belichtung machen diese global ohne Filterung jeglicher Art es schwieriger Zugang in die Zukunft zu bestimmen.

Da Objekteigenschaften Zustand halten sollen, wie die anderen erwähnt, meine Politik ist sie alle standardmäßig privat zu haben, wenn ich einen guten Grund haben, sie zu entlarven.

Es ist viel einfacher, um sie später öffentlich zu machen, wenn Sie zu haben, einfach durch eine Getter-Methode beispielsweise das Schreiben (was ich auch am Anfang nicht zu schreiben, eine Klasse zu Recht denken). Aber später in einem öffentlichen Eigentum Kokons kann eine riesige Menge an Code muß neu geschrieben werden.

Ich mag es, flexibel zu halten, während nicht über diese mehr zu denken als nötig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top