www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Expression evaluation order in if statement

reply Aarti_pl <aarti interia.pl> writes:
Hello!

Can I use if expression in following way, or is it an error?:

void func(char[] str) {
	if (str !is null && str=="somestring") {
		... some code ...
	}
}

or should I rather use:
void func(char[] str) {
	if (str !is null)
		if (str=="somestring") {
			... some code ...
		}
}

The second way is more explicit and makes code unreadable soon...

I can find clear answer in docs...

BR
Marcin Kuszczak
(Aarti_pl)
Aug 23 2007
parent reply Lutger <lutger.blijdestijn gmail.com> writes:
Aarti_pl wrote:
 Hello!
 
 Can I use if expression in following way, or is it an error?:
 
 void func(char[] str) {
     if (str !is null && str=="somestring") {
         ... some code ...
     }
 }

It's ok, see: http://www.digitalmars.com/d/expression.html#AndAndExpression "If the left operand, converted to type bool, evaluates to false, then the right operand is not evaluated."
Aug 23 2007
parent reply Aarti_pl <aarti interia.pl> writes:
Lutger pisze:
 Aarti_pl wrote:
 Hello!

 Can I use if expression in following way, or is it an error?:

 void func(char[] str) {
     if (str !is null && str=="somestring") {
         ... some code ...
     }
 }

It's ok, see: http://www.digitalmars.com/d/expression.html#AndAndExpression "If the left operand, converted to type bool, evaluates to false, then the right operand is not evaluated."

Great. Thanks for advice! BR Aarti_pl
Aug 23 2007
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Aarti_pl wrote:
 Lutger pisze:
 Aarti_pl wrote:
 Hello!

 Can I use if expression in following way, or is it an error?:

 void func(char[] str) {
     if (str !is null && str=="somestring") {
         ... some code ...
     }
 }

It's ok, see: http://www.digitalmars.com/d/expression.html#AndAndExpression "If the left operand, converted to type bool, evaluates to false, then the right operand is not evaluated."

Great. Thanks for advice!

Also, for arrays "null" is just an empty array, so you don't need the first part: 'if (str == "something")' works just fine even if 'str' is null (unlike with classes). (A while back some people were complaining about this, but I don't think this behavior is likely to change)
Aug 23 2007
parent Regan Heath <regan netmail.co.nz> writes:
Frits van Bommel wrote:
 Aarti_pl wrote:
 Lutger pisze:
 Aarti_pl wrote:
 Hello!

 Can I use if expression in following way, or is it an error?:

 void func(char[] str) {
     if (str !is null && str=="somestring") {
         ... some code ...
     }
 }

It's ok, see: http://www.digitalmars.com/d/expression.html#AndAndExpression "If the left operand, converted to type bool, evaluates to false, then the right operand is not evaluated."

Great. Thanks for advice!

Also, for arrays "null" is just an empty array, so you don't need the first part: 'if (str == "something")' works just fine even if 'str' is null (unlike with classes). (A while back some people were complaining about this, but I don't think this behavior is likely to change)

If you're referring to me, I wasn't complaining about this behaviour at all, this behaviour is great, I hope it never changes. Regan
Aug 23 2007