Optionale Parameter in einer Funktion einbauen

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Optionale Parameter in einer Funktion einbauen

Re: Optionale Parameter in einer Funktion einbauen

Post by GEV » 25 Nov 2018, 11:52

Sieht so viel sinnvoller aus und funktioniert:

Code: Select all

var1 := "abc"
var2 := 3
List1 := "1,aBc,3"

If (VarInList(var1, List1, 1) || VarInList(var2, "4,5,6"))
	MsgBox, richtig
else
	MsgBox, falsch
	
VarInList(var, List, GroßKleinSensitiv:=0){
	If (GroßKleinSensitiv)
	{
		Loop, parse, List, `,
			If (A_LoopField == var)
				return true
	}
	else
	{
		Loop, parse, List, `,
			If (A_LoopField = var)
				return true
	}
	return false
}
Danke dir vielmals!

Danke auch just me für die treffende Bezeichnung!

Re: Optionale Parameter in einer Funktion einbauen

Post by nnnik » 25 Nov 2018, 11:20

Code: Select all

var1 := "abc"
var2 := 3
List1 := "1,aBc,3"

If (VarInList(var1, List1, 1) || VarInList(var2, "4,5,6"))
	MsgBox, richtig
else
	MsgBox, falsch
	
VarInList(var, List, GroßKleinSensitiv:=0){
	If (GroßKleinSensitiv)
	{
		Loop, parse, List, `,
			If (A_LoopField = var)
				return true
	}
	else
	{
		Loop, parse, List, `,
			If (A_LoopField == var)
				return true
	}
	return false
}

Re: Optionale Parameter in einer Funktion einbauen

Post by GEV » 25 Nov 2018, 10:52

Nee, funktioniert nur so bei mir:

Code: Select all

var1 := "abc"
var2 := 3
List1 := "1,aBc,3"

If (VarInList(var1, List1, GroßKleinSensitiv) || VarInList(var2, "4,5,6"))
	MsgBox, richtig
else
	MsgBox, falsch
	
VarInList(var, List, GroßKleinSensitiv:="AllesAußerNull"){
	If (GroßKleinSensitiv)
	{
		Loop, parse, List, `,
			If (A_LoopField = var)
				return true
	}
	else
	{
		Loop, parse, List, `,
			If (A_LoopField == var)
				return true
	}
	return false
}

Re: Optionale Parameter in einer Funktion einbauen

Post by nnnik » 25 Nov 2018, 09:54

Du kannst ihr doch 0 zuweisen - hierbei gilt probieren geht über studieren.
In der Tat, break keinen Sinn und wird auch gar nicht ausgeführt.

Re: Optionale Parameter in einer Funktion einbauen

Post by GEV » 25 Nov 2018, 08:16

Das Komische dabei ist dass die optionale Variable in der Definition alle andere Werte außer 0 annehmen kann und innerhalb der Funktion muss sie den Wert 0 haben um das gewünschte Ergebnis (GroßKleinSensitiv) auszugeben. Oder verstehe ich das falsch?

Und noch eine Frage: Hat break einen Sinn in dieser Konstellation?
Kehrt das Skript nicht automatisch aus dieser Funktion-Subroutine zurück nach einem return?

Re: Optionale Parameter in einer Funktion einbauen

Post by nnnik » 25 Nov 2018, 07:18

Wieso? Ist doch richtig?

Re: Optionale Parameter in einer Funktion einbauen

Post by GEV » 25 Nov 2018, 06:21

Eigentlich will ich mehrere <If Var In> 's kombinieren (mit || oder/und &), was mit der Funktion flächen-, zeitsparender und übersichtlicher geht.
Die Parameter für Startposition und Vorkommen brauche ich nicht unbedingt.

Dies scheint einwandfrei zu funktionieren

Code: Select all

var1 := "abc"
var2 := 3
List1 := "1,AbC,3"

If (VarInList(var1, List1, GroßKleinSensitiv) || VarInList(var2, "4,5,6"))
	MsgBox, richtig
else
	MsgBox, falsch


VarInList(var, List, GroßKleinSensitiv:=1){
	If (GroßKleinSensitiv)
	{
		Loop, parse, List, `,
		{
			If (A_LoopField = var)
			{
				return true
					break
			}
		}
	}
	else
	{
		Loop, parse, List, `,
		{
			If (A_LoopField == var)
			{
				return true
					break
			}
		}
	}
	return false
}
scheint aber gegen die Regeln der Logik und was man in der Dokumentation über Optionale Parameter liest zu sein.

Wie kann ich das sinnvoller gestalten?

Re: Optionale Parameter in einer Funktion einbauen

Post by just me » 25 Nov 2018, 04:32

Moin,

Dein Beispiel irritiert mich. Die Funktion sollte meiner Meinung nach eher VarInList() heißen und entspricht bisher im Wesentlichen den Anweisungen

Code: Select all

Var := "abc"
Lst := "1,ABC,3"
If Var In %Lst%
   MsgBox, Richtig!
Else
   MsgBox, Falsch!
Die optionalen InStr() Parameter für Startposition und Vorkommen lassen sich so kaum sinnvoll umsetzen. Wie stellst Du Dir das vor?

Re: Optionale Parameter in einer Funktion einbauen

Post by nnnik » 25 Nov 2018, 02:46

Dann musst du zwischen den beiden vergleichen hin und her wechseln je nachdem welchen Wert dein Parameter annimmt.
In solchen Situationen empfiehlt sich ein If :p

Re: Optionale Parameter in einer Funktion einbauen

Post by GEV » 25 Nov 2018, 01:00

Komme leider schlecht voran.
Die GroßKleinSensitiv-Option kann ich nur einsetzen, wenn ich
If (A_LoopField == var)
verwende.

Re: Optionale Parameter in einer Funktion einbauen

Post by nnnik » 24 Nov 2018, 07:50

Man kann Parameter au optional setzen indem man einen default Wert definiert:

Code: Select all

funktion(parameter1, parameter2 := " default") { ;über das := wird der standardwert definiert
	Msgbox % parameter1 . " " . parameter2
}
funktion("parameter2=", "Hello World!")
funktion("parameter2=") ;beim weglassen des Parameters wird der Standardwert eingesetzt

Optionale Parameter in einer Funktion einbauen

Post by GEV » 24 Nov 2018, 06:48

Wie kann ich optionale Parameter (GroßKleinSensitiv, Startposition, Vorkommen) in so einer Funktion einbauen, so dass sie der eingebauten InStr()-Funktion entspricht?

Hoffe, ich drücke mich richtig aus.

Code: Select all

var1 = abc
var2 = 3

If (VarInString(var1, "1,ABC,3") || VarInString(var2, "4,5,6"))
	MsgBox, richtig
else
	MsgBox, falsch

VarInString(var, string){
	Loop, parse, string, `,
	{
		If (A_LoopField = var)
		{
			return true
				break
		}
	}
	return  false
}

Top