|
|
-
Non Short Circuit Logic
David Medinets 2012-09-12, 16:29
The if statement belows uses a single & instead of &&. Therefore it is not using short-circut logic. This seems like a typo. Does anyone object if I change the '&' to '&&'?
String delim = ""; shellState.getReader().printString("System permissions: "); for (SystemPermission p : SystemPermission.values()) { if (shellState.getConnector().securityOperations().hasSystemPermission(user, p) & p != null) { shellState.getReader().printString(delim + "System." + p.name()); delim = ", "; } } shellState.getReader().printNewline();
-
Re: Non Short Circuit Logic
John Vines 2012-09-12, 17:22
Judging from that code, p is never null so that second case is unnecessary.
Sent from my phone, so pardon the typos and brevity. On Sep 12, 2012 12:29 PM, "David Medinets" <[EMAIL PROTECTED]> wrote:
> The if statement belows uses a single & instead of &&. Therefore it is > not using short-circut logic. This seems like a typo. Does anyone > object if I change the '&' to '&&'? > > String delim = ""; > shellState.getReader().printString("System permissions: "); > for (SystemPermission p : SystemPermission.values()) { > if > (shellState.getConnector().securityOperations().hasSystemPermission(user, > p) & p != null) { > shellState.getReader().printString(delim + "System." + p.name()); > delim = ", "; > } > } > shellState.getReader().printNewline(); >
-
Re: Non Short Circuit Logic
Jim Klucar 2012-09-12, 18:04
Without looking at SystemPermisison.values(), I don't know if John is correct. If he's not, to get a speed improvement via short-circuiting, you'd want to make the null check the first check in the conditional because its faster than the method call.
On Wed, Sep 12, 2012 at 1:22 PM, John Vines <[EMAIL PROTECTED]> wrote: > Judging from that code, p is never null so that second case is unnecessary. > > Sent from my phone, so pardon the typos and brevity. > On Sep 12, 2012 12:29 PM, "David Medinets" <[EMAIL PROTECTED]> wrote: > >> The if statement belows uses a single & instead of &&. Therefore it is >> not using short-circut logic. This seems like a typo. Does anyone >> object if I change the '&' to '&&'? >> >> String delim = ""; >> shellState.getReader().printString("System permissions: "); >> for (SystemPermission p : SystemPermission.values()) { >> if >> (shellState.getConnector().securityOperations().hasSystemPermission(user, >> p) & p != null) { >> shellState.getReader().printString(delim + "System." + p.name()); >> delim = ", "; >> } >> } >> shellState.getReader().printNewline(); >>
-
Re: Non Short Circuit Logic
David Medinets 2012-09-12, 20:54
I didn't know for sure how the for loop acts when a null is the list. So I wrote some code:
List<String> strings = new ArrayList<String>(); strings.add("a"); strings.add(null); strings.add("b"); for (String s : strings) { System.out.println(s); }
The result is:
a null b
Therefore, testing for null within a for loop seems like a good idea.
-
Re: Non Short Circuit Logic
John Vines 2012-09-12, 21:00
SystemPermission is an enum, and calling values spits back a Collection of those enums. If we have a null in our enum, we have a MUCH larger issue at hand.
John
On Wed, Sep 12, 2012 at 4:54 PM, David Medinets <[EMAIL PROTECTED]>wrote:
> I didn't know for sure how the for loop acts when a null is the list. > So I wrote some code: > > List<String> strings = new ArrayList<String>(); > strings.add("a"); > strings.add(null); > strings.add("b"); > for (String s : strings) { > System.out.println(s); > } > > The result is: > > a > null > b > > Therefore, testing for null within a for loop seems like a good idea. >
|
|