# Thread: Java Concepts(?) + SRL

1. SRL Junior Member
Join Date
Dec 2016
Posts
49
Mentioned
0 Post(s)
Quoted
22 Post(s)

## Java Concepts(?) + SRL

*Note* This is a work in progress as I'm still learning and would love any discussion on the topics below!
Hi all! To explain I began taking a course on Java via Pluralsight and had some concepts that were mentioned during the training that brought up some questions in regards to if these can be used within SRL. Really just looking for discussion in helping to better understand so any input is welcome.

1. Chaining if-else (AKA scan-react method per our guides)
Per the instructor "while this is a bad practice - it is not "illegal""...OK. Great.
So in SRL terms given the nature of our scripts is this still considered bad practice? If so please explain your reasoning.
I personally use this on majority of my scripts as it's "simple" and easy for me to understand - especially the flow.

2. Multi-Variable Declarations
See example;
Simba Code:
Int v1=10, v2=4, diff;

Now - the only way I could get something "close" to this was the following:
Simba Code:
var  exec: integer =1;
I don't know how often it would get used - but in my opinion this doesn't seem like a bad idea and would be great for keeping your script "clean". Anyone know if something of this nature is possible or if there's a "best practice" to this? (see my next note on Variable Scope*)

3. Variable Scope
I feel like I've seen this posted multiple times "keep your variables local". Maybe I'm just making stuff up though. Anywho...
Why use local variable's opposed to global variables?
I understand a variable is holding a block of space but wouldn't this "improve" performance?
What is the best practice and why is that? Is this a potential memory issue?

4. Conditional Assignment/Logic
Alright as for this I haven't even bothered testing on my own yet. For example:
Simba Code:
int rooms = 0;int students = 30;if (rooms > 0 && students/rooms > 30) {...}// What this actually does... // if rooms > 0 {//   if students/rooms > 30//     System.out.println('blah');   }

So you see we just took 3 lines of code and simplified it drastically down to only 1. I thought this was absolutely bad ass. As stated I haven't tested anything like this within SRL but are the capabilities there?

Edit: Further thought I know I've done similar to do 2 and sometimes even 3 checks by doing "and" within a scan/react method. I believe there was one in Java however where basically you use ? so if the first one doesn't turn out good the second one will then run. I think this was "conditional assignment" ex.
Simba Code:
int v1=7int v2=5int vMax = v1 > v2 ? v1: v2

2. Originally Posted by BlitzKrieger
...
1. I assume you mean multiple nested if-statements. No it's not bad practice and sometimes it's necessary. However, if a statement has too much logic and can be packaged into a function call, then do that.

If you mean ternary operator chaining, then Simba has no such thing.. IE:
Java Code:
int x = y > 0 ? z < 1 ? 9 : 8 : 10;//same as:int x = 0;if (y > 0){    if (z < 1)    {        x = 9;    }    else    {        x = 8;    }}else{    x = 10;}

So use if-statements instead (you'll still get short-circuit evaluation).

2. You cannot initialize multiple variables at the same time in a single statement. You can do something like:

Simba Code:
var  x: Integer = 0; y: Integer = 1; z: Integer = 2;

which is the same as:

Simba Code:
var  x: Integer = 0;  y: Integer = 1;  z: Integer = 2;

or

Simba Code:
var  x, y, z: Integer;begin  x := 0;  y := 1;  z := 2;  x := y := z := 0; //initialize all to 0.end;

3. Who said to keep all of them local? Keep them where they're supposed to be. If the variable is used by the entire script, then it is a global variable. IE: Constants (although constants aren't "variables". They are constant.

For example, Bitmaps.. If they are used throughout the entire script, why not load the bitmap once (stored in a global variable).. and some time before the script terminates, free the bitmap.. This way, you aren't loading a bitmap every function call (Local scope)..

3b. No there is no performance difference. Simba is interpreted. Not compiled. I doubt you'd see any difference in a compiled language as well.. Besides.. that's MICRO-OPTIMIZATION which is frowned upon in any programming language unless you absolutely 100% need every "bit" of performance you can get (IE: Micro-controller programming and Game-Programming, etc)..

4.
Simba Code:
var  rooms: Integer = 0;  students: Integer = 30;begin  if ((rooms > 0) and (students / rooms > 30)) then  begin    //...  end;  //What this actually does..  if rooms > 0 then    if students / rooms > 30 then      writeln('blah');end;
Last edited by Brandon; 08-16-2017 at 12:43 AM.

3. SRL Junior Member
Join Date
Dec 2016
Posts
49
Mentioned
0 Post(s)
Quoted
22 Post(s)
Originally Posted by Brandon
1. I assume you mean multiple nested if-statements. No it's not bad practice and sometimes it's necessary. However, if a statement has too much logic and can be packaged into a function call, then do that.

If you mean ternary operator chaining, then Simba has no such thing.. IE:
Java Code:
int x = y > 0 ? z < 1 ? 9 : 8 : 10;//same as:int x = 0;if (y > 0){    if (z < 1)    {        x = 9;    }    else    {        x = 8;    }}else{    x = 10;}

2. You cannot initialize multiple variables at the same time in a single statement. You can do something like:

Simba Code:
var  x: Integer = 0; y: Integer = 1; z: Integer = 2;

which is the same as:

Simba Code:
var  x: Integer = 0;  y: Integer = 1;  z: Integer = 2;

or

Simba Code:
var  x, y, z: Integer;begin  x := 0;  y := 1;  z := 2;  x := y := z := 0; //initialize all to 0.end;

3. Who said to keep all of them local? Keep them where they're supposed to be. If the variable is used by the entire script, then it is a global variable. IE: Constants (although constants aren't "variables". They are constant.

For example, Bitmaps.. If they are used throughout the entire script, why not load the bitmap once (stored in a global variable).. and some time before the script terminates, free the bitmap.. This way, you aren't loading a bitmap every function call (Local scope)..

3b. No there is no performance difference. Simba is interpreted. Not compiled. I doubt you'd see any difference in a compiled language as well.. Besides.. that's MICRO-OPTIMIZATION which is frowned upon in any programming language unless you absolutely 100% need every "bit" of performance you can get (IE: Micro-controller programming and Game-Programming, etc)..

4.
Simba Code:
var  rooms: Integer = 0;  students: Integer = 30;begin  if ((rooms > 0) and (students / rooms > 30)) then  begin    //...  end;  //What this actually does..  if rooms > 0 then    if students / rooms > 30 then      writeln('blah');end;
I edit section 4 prior to seeing your response. I was aware of using and - I apparently got a little excited over it and spaced out.
Update: Edit: Further thought I know I've done similar to do 2 and sometimes even 3 checks by doing "and" within a scan/react method. I believe there was one in Java however where basically you use ? so if the first one doesn't turn out good the second one will then run. I think this was "conditional assignment" ex.

As for 1. Chaining if else - I don't think it would be considered "nesting" but you tell me.
Simba Code:
if (...) thenelse if (...) thenelse if (...) thenelse if (...) then//and so on and so forth...

Now obviously dependent on what's above it could be as simple as using a case - although that's not where I'm going with this. More of a "MainLoop" type of deal where it's doing individual checks to determine what it needs to run next. This likely won't change your original answer but just want to make sure we're on the same page.

Appreciate the fast response!