Dart: Flow Control

Dart: Flow Control

Understand decision, selection and loops in Dart.

Flow control statements allow a program to execute instructions conditionally or repeatedly based on inputs or conditions. They are crucial for Turing complete languages.

The main flow control statements are:

  • If-else: Allows conditional execution of code based on a boolean condition.

  • For loops: Repeats a block of code for a specified number of iterations.

  • While loops: Repeats a block of code while a boolean condition is true.

  • Break: Jumps out of the current loop.

  • Continue: Skips the current iteration and continues with the next.

  • Switch-case: Allows selection of a code block to execute based on different conditions.

These flow control statements enable a programming language to perform conditional and iterative execution of code, which is Turing completeness. A Turing complete language is one that is capable of simulating a Turing machine, meaning it can compute any computable function.

So in summary, flow control statements like if-else, for loops, while loops etc. are necessary for a programming language to be Turing complete since they enable conditional and iterative execution of code.


Decision

Decision and selection statements in Dart allow your program to make choices and select different code paths based on conditions. The main decision statements in Dart are:

  1. if statement - The basic conditional statement. It executes a block of code if a condition is true:
if (condition) {
  // Executes if condition is true
}
  1. if-else statement - Executes one block of code if a condition is true, and another block if false:
if (condition) {
  // Executes if true
} else {
  // Executes if false
}
  1. else if ladder - A chain of else if statements to choose from multiple options:
if (condition1) {
  // ..
} else if (condition2) {
  // .. 
} else if (condition3) {
  // ..
} else {
  // Default 
}
  1. switch statement - Selects one of many code blocks to execute based on different conditions:
switch (expression) {
  case 'a':
    // Executes when expression == 'a'
    break;  
  case 'b':  
    // Executes when expression == 'b'    
    break;
  default:
    // Executes if no matches    
}

These statements allow your program to:

  • Make decisions based on conditions

  • Select different code paths

  • Branch the code flow into multiple paths

  • Fork the code flow into two or more paths

They give your Dart programs the ability to select code to execute based on different inputs and states, making them more dynamic and adaptable.

In summary, decision and selection statements like if, if-else, else if ladders and switch allow Dart programs to select code to execute based on conditions, enabling more flexible and adaptive program behavior.


Repetition

There are three main types of repetitive statements in Dart:

  1. for loop - Executes a block of code for a specified number of iterations:
for (int i = 0; i < 10; i++) {
  print(i); 
}
  1. for-in loop - Loops through the elements of an iterable:
for (var name in names) {
  print(name); 
}
  1. while loop - Executes a block of code while a condition is true:
while (condition) {
  // code block
}
  1. do-while loop - Similar to while loop but the code block is executed at least once:
do {
  // code block 
} while (condition);

These repetitive statements allow your Dart programs to:

  • Execute the same code multiple times

  • Traverse iterables like lists and maps

  • Repeat an action while a condition is true

They provide the necessary iteration capabilities that make a programming language Turing-complete. Without repetition, programs would be very limited in what they could accomplish.

The main differences between the loops are:

  • for loops are used when you know the exact number of iterations beforehand

  • while loops are used when you need to repeat an action while a condition is true, but you don't know the number of iterations beforehand

  • do-while loops are similar to while loops but execute the code block at least once before checking the condition.

So in summary, repetitive statements like for, while and do-while loops provide the necessary iteration capabilities that make Dart a fully featured programming language, enabling programs to repeat actions as many times as needed.


Labels

Labels and jumps are not commonly used constructs in Dart. They allow you to:

  • Label loops and blocks of code

  • Break out of a labeled loop from within an inner loop

  • Continue a labeled loop from within an inner loop

This can be useful in some situations to alter the normal flow of control in loops.

For example, to label a loop:

loop1: for (int i = 0; i < 10; i++) {
  // ...
}

To break out of a labeled loop from within an inner loop:

loop1: for (int i = 0; i < 10; i++) {
  loop2: for (int j = 0; j < 10; j++) {
    if (someCondition) {
      break loop1;  // Breaks out of loop1
    }
  }
}

And to continue a labeled loop:

loop1: for (int i = 0; i < 10; i++) {
  loop2: for (int j = 0; j < 10; j++) {  
    if (someCondition) {
      continue loop1;  // Continues loop1  
      }
    }  
}

So in summary, labels and jumps allow you to:

  • Label loops and blocks

  • Break out of a labeled loop from within an inner loop

  • Continue a labeled loop from within an inner loop

This gives you more control over the flow of execution in nested loops, but they are not commonly used since normal loop constructs are usually sufficient. Use with care since they can make code harder to follow.


Break and Continue

Break and continue are control flow statements that allow you to alter the normal flow of loops in Dart.

break immediately exits the current loop, while continue skips the current iteration and continues with the next.

The syntax is:

break;  // Exits the current loop
continue;  // Skips the rest of this iteration

For example:

for (int i = 0; i < 10; i++) {
  if (i == 5) {
    break; // Exits the loop when i is 5
  }
  print(i);
}

for (int i = 0; i < 10; i++) {
  if (i == 5) {
    continue; // Skips printing 5    
  }
  print(i);  
}

This prints:

0  
1
2
3  
4
0
1
2  
3
4
6
7
8
9

Break and continue are useful to:

  • Exit a loop early when a condition is met

  • Skip the current iteration when a condition is met

They provide more control over the flow of loops in your Dart programs.

The main differences are:

  • break immediately exits the current loop

  • continue skips the current iteration and continues with the next iteration

So in summary, break and continue statements allow you to:

  • Exit a loop early using break

  • Skip the current iteration using continue

Giving you more control over the flow of loops in your Dart programs. Use with care to not make the code too complex.


Disclaim: This article is created with Rix AI. I have asked the most important questions. Feel free to ask more, related to control flow and post below your question and the answer you have received.