BigBastis Blog

Unbegrenzte Anzahl an Parametern uebergeben

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

.NET

Unbegrenzte Anzahl an Parametern uebergeben

Posted on .

Mir ist aufgefallen, dass viele gar nicht wissen, dass man Methoden so gestalten kann, dass diese eine unbestimmte menge an Parametern akzeptieren. Das gibt es sowohl in Java als auch in .NET (und wohl jeder anderen höheren Programmiersprache)

Wie sieht das Ganze aus? Naja wenn ihr schon mit C#/.NET Gearbeitet habt werdet ihr wohl nicht um diese Funktion herum gekommen sein:

string var = String.Format("Hallo mein Name ist {0} und ich komme aus {1}", "Bernd", "Kassel");

Die Zahlen in den Geschweiften Klammern sind hierbei Platzhalter, die später über eine Variable gefüllt werden. Von diesen Platzhaltern kann man beliebig viele angeben, dementsprechend müssen dann aber auch genauso viele Parameter mit den Werten angegeben werden.

Wie sieht hier die Deklaration dieser Methode aus?

public void DoSomething(int someValue, params string[] values)
{
    foreach (string value in values){
        Console.WriteLine(value);
	}
}

Diese Methode nimmt nun einen normalen int Parameter an und ab dann können beliebig viele Werte vom Typ String folgen:

DoSomething(12345, "Hallo", "Wer", "Bist", "Du");

Genauso kann man das auch in Java machen, hier ist es sogar etwas schöner gelöst wie ich finde:

//Methoden Deklaration
public DoSomething(int someValue, String... values) {
	for(String value : values){
		System.out.println(value);
	}
}

//Nutzung:
DoSomething(12345, "Hallo", "Wer", "Bist", "Du");

In Java werden hier nach dem Variablentyp drei Punkte angehängt die signalisieren, dass dieser Typ nun beliebig oft folgen kann.

Dabei wird intern aber auch nur ein Array mit den Werten erzeugt, das kann man bei der .NET Variante bereits in der Deklaration erkennen. So lässt sich in Java die main-Methode auch so schreiben, ohne dass es zu Problemen kommt:

public static void main(String... args) {
    for(String s : args){
        System.out.println(s);
    }
}

Es sei an dieser Stelle noch erwähnt, dass der Parameter, der beliebig oft folgen kann immer als letztes angegeben werden muss – aus offensichtlichen Gründen 😉

Diese Schreibweise kann an einigen Stellen für deutlich bessere Lesbarkeit sorgen und vereinfacht einfach nur die Anwendung der Funktionen, sollte man auf jeden Fall schon mal gesehen haben.

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

Comments
user

Author bigbasti87

Posted at 13:48 5. Januar 2011.

Bloggd: Unbegrenzte Anzahl an Parametern übergeben – http://blog.bigbasti.com/unbegrenzte-anz

user

Author ich

Posted at 10:29 21. Januar 2011.

Im Title fehlt bei „übergeben“ das ü da steht nur „bergeben“ 😉

user

Author admin

Posted at 10:32 21. Januar 2011.

Stimmt, die Schriftart schluckt leider Umlaute – werde ich korrigieren danke!

user

Author james

Posted at 12:33 2. Mai 2012.

Hallo Admin,
Ihr Java Programm, wird so nicht funktionieren, da Sie einen kleinen Fehler gemacht haben.

Entweder ändern sie im Kopf der Foreach-Schleife das vaule in value um oder sie ändern in der Schleife, das value in vaule um, vielen Dank.

for(String vaule : values){
4
System.out.println(value);
5
}

user

Author Sebastian Gross

Posted at 12:34 2. Mai 2012.

Hallo james,

danke für den Hinweis, da hat sich wohl ein Typo eingeschlichen 🙂
Gruß, Sebastian

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (5) ...
Navigation