|If () Then|
if <> then
- Not to be confused with If () Then, Else (block).
The if () then block is a control block and a C block. If its boolean condition is true, the blocks inside it will run. If the condition is false, the blocks inside the block will be ignored. The condition is only checked once; if the condition turns to false while the script inside the block is running, it will keep running until it has finished.
Prior to Scratch 2.0, this block was called if ().
The most basic uncertainty in programming is checking conditions. This block is Scratch's main way of doing this; it is therefore used in nearly all projects. Some common uses include:
- Comparing values
if <(answer) = > then say [Correct!] end
- Checking if input is given
if <<mouse down?> and <(amount) = >> then stamp end
- Checking if a sprite is clicked
if <<mouse down?> and <touching (mouse-pointer v)?>> then end
- Controlling objects
if <key (space v) pressed?> then broadcast (jump v) end when I receive [jump v] repeat (6) change y by (2) end repeat (6) change y by (-2) end
- Making sure a list contains a specific item
if <[list v] contains ?> then stop [all v] end
- Main article: List of Block Workarounds
This block can be replicated by not utilizing the second field in the If () Then, Else block:
if <. . . :: grey> then . . . else end
Alternatively, this block can be replicated by passing the boolean condition to the Repeat () block:
repeat <. . . :: grey> ... end
This works because if the boolean is true, it will run one time as putting a boolean into a number reporter equals 1, but if the boolean is false, it will repeat zero times which means the script will not run.
Some users are confused as to why a script does not work when using the block. One of the most common misunderstandings about it is that it repeatedly checks for a condition, so some users do not understand why a script isn't working with only the if block. To make it repeatedly check a condition, it simply needs to be put in a Forever loop or another kind of repetition.
forever if <. . . ::grey> then ...
repeat(6) if <. . . ::grey> then ...