Optionale Parameter in einer Funktion einbauen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Optionale Parameter in einer Funktion einbauen

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
}
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

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
Recommends AHK Studio
GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Re: Optionale Parameter in einer Funktion einbauen

25 Nov 2018, 01:00

Komme leider schlecht voran.
Die GroßKleinSensitiv-Option kann ich nur einsetzen, wenn ich
If (A_LoopField == var)
verwende.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

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
Recommends AHK Studio
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

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?
GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Re: Optionale Parameter in einer Funktion einbauen

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?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

25 Nov 2018, 07:18

Wieso? Ist doch richtig?
Recommends AHK Studio
GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Re: Optionale Parameter in einer Funktion einbauen

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?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

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.
Recommends AHK Studio
GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Re: Optionale Parameter in einer Funktion einbauen

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
}
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Parameter in einer Funktion einbauen

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
}
Recommends AHK Studio
GEV
Posts: 1002
Joined: 25 Feb 2014, 00:50

Re: Optionale Parameter in einer Funktion einbauen

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!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero, Noitalommi_2 and 33 guests