From 41eedcdff84222652fbd115b90b14c41a60595b4 Mon Sep 17 00:00:00 2001 From: Galen Nickel Date: Sun, 13 Jan 2019 08:36:51 -0800 Subject: [PATCH] text and pics for conditionals lesson (#1790) --- docs/courses/blocks-to-javascript.md | 7 + .../complex-conditionals.md | 141 ++++++++++++++++++ .../blocks-to-javascript/conditionals.png | Bin 0 -> 16762 bytes 3 files changed, 148 insertions(+) create mode 100644 docs/courses/blocks-to-javascript/complex-conditionals.md create mode 100644 docs/static/courses/blocks-to-javascript/conditionals.png diff --git a/docs/courses/blocks-to-javascript.md b/docs/courses/blocks-to-javascript.md index 80af4353..fe07bb37 100644 --- a/docs/courses/blocks-to-javascript.md +++ b/docs/courses/blocks-to-javascript.md @@ -31,6 +31,13 @@ Are you ready to try JavaScript to write your code? "cardType": "side", "imageUrl": "/static/courses/blocks-to-javascript/writing-code.png" }, + { + "name": "Complex Conditionals", + "description": "Use more complex conditionals in JavaScript", + "url": "/courses/blocks-to-javascript/complex-conditionals", + "cardType": "side", + "imageUrl": "/static/courses/blocks-to-javascript/conditionals.png" + }, { "name": "Conditional Loops", "description": "Work with your conditional loop blocks in JavaScript", diff --git a/docs/courses/blocks-to-javascript/complex-conditionals.md b/docs/courses/blocks-to-javascript/complex-conditionals.md new file mode 100644 index 00000000..b12b93ab --- /dev/null +++ b/docs/courses/blocks-to-javascript/complex-conditionals.md @@ -0,0 +1,141 @@ +# Complex conditionals + +## Multiple conditions + +Sometimes there is code you want to run if two or more conditions are true. The ``||logic:if then||`` block lets you combine conditions with the ``||logic:and||`` and the ``||logic:or||`` blocks. For example, if we want to see if a random number is between `0` and `9`, we can put two conditions in an ``||logic:if then||`` and connect them with an ``||logic:and||``. + +```blocks +let rando = Math.randomRange(-20, 20) +if (rando >= 0 && rando < 10) { + basic.showNumber(rando) +} +``` + +This is how to check if a result is within a range of values, in this case it's from `0` to `9`. What if we want to include the values between `15` and `18` too? We just add another range check and connect them with an ``||logic:or||``. + +```blocks +let rando = Math.randomRange(-20, 20) +if ((rando >= 0 && rando < 10) || (rando >= 15 && rando < 18)) { + basic.showNumber(rando) +} +``` + +Having all of these conditions in one ``||logic:if then||`` makes a large and complicated block. It can be hard to see how the complete conditional does both of the range checks. At times, it's easier to read the code in the JavaScript editor to better see the order and connections of the conditions. + +```typescript +let rando = Math.randomRange(-20, 20) +if ((rando >= 0 && rando < 10) || (rando >= 15 && rando < 18)) { + basic.showNumber(rando) +} +``` + +As you can see, reading the code for this conditional is might seem easier in JavaScript. + +## Nested `if` statements + +If one ``||logic:if then||`` block is placed inside another, then each condition for checking the random number is placed in its own ``||logic:if then||``. This give the same result as before with the two conditions in the ``||logic:if then||``. + +```block +let rando = Math.randomRange(-20, 20) +if (rando >= 0) { + if (rando < 10) { + basic.showNumber(rando) + } +} +``` + +When we switch the editor to JavaScript view, we see that the second ``if ()`` statement is indented and contained inside the `{ }` of the first. This matches the second ``||logic:if then||`` block that fits inside the first one. These are called _nested_ if statements. + +```typescript +let rando = Math.randomRange(-20, 20) +if (rando >= 0) { + if (rando < 10) { + basic.showNumber(rando) + } +} +``` + +## Parallel `if` conditions + +When you want to check if one condition or another is true, you can connect them with an ``||logic:or||`` block. As an example, let's show a square shaped icon when either button **A** or **B** is pressed. + +```blocks +basic.forever(function () { + if (input.buttonIsPressed(Button.A) || input.buttonIsPressed(Button.B)) { + basic.showIcon(IconNames.Square) + } else { + basic.showIcon(IconNames.No) + } +}) +``` + +The two ``||input:button is pressed||`` blocks are connected with an ``||logic:or||`` in the ``||logic:if then||`` conditional to make the check to see if one of the two buttons is currently pressed. + +Looking at the condition inside the ``if`` statement in JavaScript editor, we see that the two conditions are connected with the OR (``||``) operator which makes the condition `true` if either button is pressed. So, the conditons work in _parallel_. + +```typescript +if (input.buttonIsPressed(Button.A) || input.buttonIsPressed(Button.B)) { + basic.showIcon(IconNames.Square) +} +``` + +We can create the same conditional check as in the code above but with a different form. Changing the code slighlty, we can insert an ``||logic:else if||`` and put one of the button press conditons inside of it. This version checks for either button press like before but it needs another ``||basic:show icon||`` which adds more code. + + +```blocks +basic.forever(function () { + if (input.buttonIsPressed(Button.A)) { + basic.showIcon(IconNames.Square) + } else if (input.buttonIsPressed(Button.B)) { + basic.showIcon(IconNames.Square) + } else { + basic.showIcon(IconNames.No) + } +}) +``` + +## Conditional expressions + +Often you will need to set a boolean variable to remember the result of a conditional test. If we want to set a boolean variable called ``cold`` to `true` when the tempurature is less than `10` degress, we could do it using an ``||logic:if then else||`` block. + +```block +let cold = false +if (input.temperature() < 10) { + cold = true +} else { + cold = false +} +``` + +A more direct way to do this is to set a boolean variable to the result of a _conditional expression_. This done by taking the condition that normally goes inside the ``||logic:if then||`` block and just assigning a boolean variable to it. + +```block +let cold = input.temperature() < 10 +``` + +In the JavaScript editor, this block appears as this simple variable assignment: + +```typescript +let cold = input.temperature() < 10 +``` + +Conditional expressions also work for setting variables of other types too. We'll take the ``||logic:if then else||`` block from the previous example but this time let's set a message string to say when it's warm or cold. + +```blocks +let heatMessage = "" +if (input.temperature() < 10) { + heatMessage = "COLD" +} else { + heatMessage = "WARM" +} +``` + +Now let's use the condtion in the ``||logic:if then else||`` block to set the string variable ``heatMessage`` directly. To do this we need to switch over to the JavaScript editor. Instead of using the result of the conditional expression to set the value of the variable, the expression will determine a value option for ``heatMessage``. + +To set the variable based on the result of the expression, the value options are placed right after the expression using a `?`. The the value option for a `true` result is stated first and then followed by a `:` with the value option for a `false` result after that. It looks like this: + +```typescript +let heatMessage = input.temperature() < 10 ? "COLD" : "WARM" +``` + +The ``heatMeassage`` variable is set to the string saying ``"COLD"`` if the temperature is less than `10` degrees celsius or to ``"WARM"`` when it's `10` degrees or warmer. diff --git a/docs/static/courses/blocks-to-javascript/conditionals.png b/docs/static/courses/blocks-to-javascript/conditionals.png new file mode 100644 index 0000000000000000000000000000000000000000..8565f996935bf8c582f952d047784d940827da3e GIT binary patch literal 16762 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 literal 0 HcmV?d00001