summaryrefslogtreecommitdiffhomepage
path: root/hack.html.markdown
diff options
context:
space:
mode:
authorAndrew <andrewdimola@gmail.com>2022-07-15 20:52:44 -0400
committerGitHub <noreply@github.com>2022-07-15 20:52:44 -0400
commitcc9abf1c46a3047862d58f30d0613bf3581045d0 (patch)
treefbe98d65255c54a5038b4607d1c3334085362132 /hack.html.markdown
parent13743fc49a16934babe480f87d98a344201bec30 (diff)
Run Hackfmt and improve examples
Run hackfmt (the hack formatter) on the file Clean up examples in the hack arrays section Add a section on the unique binary pipe operator (and variable)
Diffstat (limited to 'hack.html.markdown')
-rw-r--r--hack.html.markdown47
1 files changed, 39 insertions, 8 deletions
diff --git a/hack.html.markdown b/hack.html.markdown
index 89147dbc..1ab958b5 100644
--- a/hack.html.markdown
+++ b/hack.html.markdown
@@ -81,7 +81,7 @@ namespace LearnHackinYMinutes {
$the_answer = 42;
$is_answer = process_key($the_answer);
- // Similarily, `num` represents either an int or float.
+ // Similarly, `num` represents either an int or float.
$lucky_number = 7;
$lucky_square = calculate_square($lucky_number);
}
@@ -107,7 +107,7 @@ namespace LearnHackinYMinutes {
}
// In contrast, an enum class can be of any value type!
- enum class Random : mixed {
+ enum class Random: mixed {
int X = 42;
string S = 'foo';
}
@@ -117,27 +117,39 @@ namespace LearnHackinYMinutes {
* ==================================
*/
+ // The following line lets us use functions in the `C\` namespace.
+ use namespace HH\Lib\C; // the `C` library operates on containers
+
function demo_hack_arrays(): void {
- // vec: ordered
+ // vec: ordered
$v = vec[1, 2, 3];
$letters = vec['a', 'b', 'c'];
- $letters[0]; // indexing at `0` returns 'a'
+
+ $letters[0]; // returns 'a'
$letters[] = 'd'; // appends 'd'
- // unset($letters['a']); error: remove-at-index is unsupported for vec
- // keyset: ordered, without duplicates
+ // `inout` provides pass-by-reference behavior
+ C\pop_back(inout $letters); // removes 'd'
+ C\pop_front(inout $letters); // removes 'a'
+
+ // keyset: ordered, without duplicates
$k = keyset[1, 2, 3]; // values must be int or string
$colors = keyset['red', 'blue', 'green'];
- // $colors[0]; error: indexing not supported for keyset
+
+ // keyset keys are identical to their values
+ $colors['blue']; // returns 'blue'.
+
$colors[] = 'yellow'; // appends 'yellow'
unset($colors['red']); // removes 'red'
// dict: ordered, by key-value
$d = dict['a' => 1, 'b' => 3]; // keys must be int or string
$alphabet = dict['a' => 1, 'b' => 2];
+
$alphabet['a']; // indexing at 'a' returns `1`
$alphabet['c'] = 3; // adds a new key-value pair of `c => 3`
+
unset($alphabet['b']); // removes 'b'
}
@@ -149,7 +161,6 @@ namespace LearnHackinYMinutes {
// The Hack Standard Library is a set of functions and classes for the Hack language.
// Namespace use declarations are ideally at the top of your file but are placed here for instruction purposes.
- use namespace HH\Lib\C; // the `C` library operates on containers (like Hack Arrays)
use namespace HH\Lib\Str; // The `Str` library operates on strings
function demo_hack_standard_library(): void {
@@ -217,6 +228,26 @@ namespace LearnHackinYMinutes {
// $f = (int $x): int ==> $x + 1;
/* ==================================
+ * PIPE OPERATOR
+ * ==================================
+ */
+
+ // The pipe operator, `|>`, evaluates the result of a left-hand expression
+ // and stores the result in `$$`, the predefined pipe variable.
+
+ use namespace HH\Lib\Vec;
+
+ function demo_pipe_operator(): void {
+
+ Vec\sort(Vec\map(vec[2, 1, 3], $a ==> $a * $a)); // vec[1,4,9]
+
+ // the same result, but using the pipe operator and pipe variable:
+ $x = vec[2, 1, 3]
+ |> Vec\map($$, $a ==> $a * $a) // $$ with value vec[2,1,3]
+ |> Vec\sort($$); // $$ with value vec[4,1,9]
+ }
+
+ /* ==================================
* ATTRIBUTES
* ==================================
*/