diff --git a/content/00_randomness.html b/content/00_randomness.html index e80c145..5b0a084 100644 --- a/content/00_randomness.html +++ b/content/00_randomness.html @@ -90,12 +90,17 @@
Earlier I stated that you could flip two coins. In p5.js, however, when you want to randomly choose from a list of options, you can simply generate a random number with the random()
function. It picks a random floating-point (decimal) value within any range you want. Here, I use 4 to indicate a range of 0 to 4:
let choice = floor(random(4));
I declare a variable choice
and assign it a random integer (whole number) by using floor()
to remove the decimal places from the random floating-point number. Technically speaking, the number generated by random(4)
lies within the range of 0 (inclusive) to 4 (exclusive), meaning it can never actually be 4.0. The highest possible number it could generate is just below 4—3.999999999 (with as many 9s as JavaScript will allow), which floor()
then truncates down to 3, removing the decimal part. Therefore, I’ve effectively assigned choice
a value of 0, 1, 2, or 3.
In JavaScript, variables can be declared using either let
or const
. A typical approach is to declare all variables with const
and change to let
when needed. In this first example, const
would be appropriate for declaring choice
as it’s never reassigned a new value over the course of its life inside each call to step()
. While this differentiation is important, I’m choosing to follow the p5.js example convention and declare all variables with let
.
I recognize that JavaScript has both const
and let
for important reasons. However, the distinction can be a distraction and confusing for beginners. I encourage you to explore the topic further and make your own decisions about how to best declare variables in your own sketches. For more, you can read the discussion surrounding issue #3877 in the p5.js GitHub repository.
I’m also choosing to use JavaScript’s strict equality (===
) operator (and its inequality counterpart, !==
). This Boolean operator tests both value and type equality. For example, 3 === '3'
will evaluate to false
because the types are different (number versus string), even though they look similar. On the other hand, using the loose equality (==
) operator in 3 == '3'
would result in true
because the two different types are converted to be comparable. Although the loose comparison often works fine, it can sometimes lead to unexpected results, so ===
is probably the safer choice.
Next, the walker takes the appropriate step (left, right, up, or down), depending on which random number was picked. Here’s the full step()
method closing out the Walker
class:
step() { - // 0, 1, 2, or 3 + // 0, 1, 2, or 3. The random choice determines the step. let choice = floor(random(4)); - // The random choice determines the step. if (choice === 0) { this.x++; } else if (choice === 1) { @@ -108,16 +113,6 @@ } }
In JavaScript, variables can be declared using either let
or const
. A typical approach is to declare all variables with const
and change to let
when needed. In this first example, const
would be appropriate for declaring choice
as it’s never reassigned a new value over the course of its life inside each call to step()
. While this differentiation is important, I’m choosing to follow the p5.js example convention and declare all variables with let
.
I recognize that JavaScript has both const
and let
for important reasons. However, the distinction can be a distraction and confusing for beginners. I encourage you to explore the topic further and make your own decisions about how to best declare variables in your own sketches. For more, you can read the discussion surrounding issue #3877 in the p5.js GitHub repository.
I’m also choosing to use JavaScript’s strict equality (===
) operator (and its inequality counterpart, !==
). This Boolean operator tests both value and type equality. For example, 3 === '3'
will evaluate to false
because the types are different (number versus string), even though they look similar. On the other hand, using the loose equality (==
) operator in 3 == '3'
would result in true
because the two different types are converted to be comparable. Although the loose comparison often works fine, it can sometimes lead to unexpected results, so ===
is probably the safer choice.
Now that I’ve written the class, it’s time to make an actual Walker
object in the sketch itself. Assuming you’re looking to model a single random walk, start with a single global variable:
// A Walker
object
let walker;