Frage zu Parameter bei der Übergabe an Methoden

Hallo,

ist es so, dass die Parameter thePin und dauer nur innerhalb von blinken Gültigkeit haben?

void blinken(int thePin, int dauer)
{
digitalWrite(thePin, HIGH);
delay(500);
digitalWrite(thePin, LOW);
delay(500);
}

Darf man es alternativ auch so machen:

int thePin

void blinken(thePin, int dauer)
{
digitalWrite(thePin, HIGH);
delay(500);
digitalWrite(thePin, LOW);
delay(500);
}

Danke!!

Gruß Chris

Dann brauchst du den Parameter nicht. Die Variable ist in der Methode auch so sichtbar.

Ich verstehe die Antwort leider nicht.

Wenn das eine globale Variable ist (was bei Pin Definitionen i.d.R. der Fall ist), dann ist der Parameter überflüssig. Die Methode kann auch ohne ihn direkt darauf zugreifen. Parameter sind dafür da um Informationen an Methoden zu übergeben, die ansonsten für diese nicht sichtbar sind.

Wenn du aber beliebige Pins blinken lassen willst:

blinken(5, 300);
blinken(6, 100);

...dann brauchst du ihn. Und der Datentyp muss definiert sein, da es call by value ist. Die Variable wird in den Parameter kopiert.

Ah- ok.

Ist folglich das Endergebnis bei den beiden folgenden Methoden identisch?

chk(sc_sel)

void chk(byte scaler)
{
  switch(scaler)
  {
  case 1:
    {
      "Lampe geht an"
    }
  }
}
chk()

void chk()
{
  switch(sc_sel)
  {
  case 1:
    {
      "Lampe geht an"
    }
  }
}

Edit: Leichte Änderungen vorgenommen, da vorher fehlerbehaftet.

Würde gehen! Wobei ich auf jedenfall zur 1 Variante raten würde. Es macht keinen Sinn, jede Varialbe als GLOBAL zu deklarieren., wenn sie nur für eine Funktion benötigt werden

Danke, aber nur noch einmal für mich zum Verständnis:

Wenn ich sc_sel in mehreren Methoden verwenden möchte, wäre es besser die untere der beiden Varianten zu bevorzugen, oder?

Der Schreibaufwand wäre für mich viel geringerer.

Gruß Chris

Ja, der Schreibaufwand ist geringer, wenn mal ALLE Variabeln im GLOBAL deklariert.

Ernsthaft, wegen den paar Zeichen machst du dir jetzt sorgen? Dein Part kannst du auch direkt in die loop dann schreiben. Scheinbar rufst du die Funktion nur für einen Fall auf.

Anders natürlich, wenn du sowas machst wie Serenfly geschrieben hat. Dort ist die Funktion mehrmals nutzbar für andere Einsatzzwecke.

Parameter sind dafür da um Informationen an Methoden zu übergeben, die ansonsten für diese nicht sichtbar sind.

Einspruch Euer Ehren. Parameter sind dazu da damit Funktionen (und Methoden) von der "Außenwelt" entkoppelt werden können. Normalerweise mit dem Ziel die Wiederverwendbarkeit der Implementation zu erhöhen. Und weiterhin auch mit dem Ziel unabhängig testen zu können.

Schreibaufwand ist ein eher nachrangiges Ziel weil Code erst einmal funktionieren muss :wink: