aboutsummaryrefslogtreecommitdiffhomepage
path: root/slide.saty
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2023-03-12 20:41:50 +0900
committernsfisis <nsfisis@gmail.com>2023-03-12 20:41:50 +0900
commit31f7cf43b4f80fc34cfbf9afc3620d13276a0525 (patch)
treea57f216340f628aa74d3dde89a4f3a16aa08d3b3 /slide.saty
parent4f55a90a0408ec59812f1de63daecbd42c1d5084 (diff)
downloadphpstudy-150-slides-31f7cf43b4f80fc34cfbf9afc3620d13276a0525.tar.gz
phpstudy-150-slides-31f7cf43b4f80fc34cfbf9afc3620d13276a0525.tar.zst
phpstudy-150-slides-31f7cf43b4f80fc34cfbf9afc3620d13276a0525.zip
いくつかのスライドを割愛
Diffstat (limited to 'slide.saty')
-rw-r--r--slide.saty158
1 files changed, 87 insertions, 71 deletions
diff --git a/slide.saty b/slide.saty
index 2722ef6..fbf5fb6 100644
--- a/slide.saty
+++ b/slide.saty
@@ -23,6 +23,22 @@ for ($i = 1; $i <= 100; $i++) {
}
`
+let fizzbuzz-w5 = `<?php
+for($i
+=1;$i
+<=100;
+$i++){
+echo(
+$i%3?
+'':
+'Fizz'
+).($i%
+5?'':
+'Buzz'
+)?:$i,
+"\n";}
+`
+
let fizzbuzz-0 = `<?php
for ($i = 1; $i <= 100; $i++) {
echo ($i%3?'':'Fizz') . ($i%5?'':'Buzz') ?: $i, "\n";
@@ -63,14 +79,6 @@ echo $result;
`#
let string-xor-fizz = `<?php
-$a = "L\n[p";
-$b = "\nc!\n";
-echo $a ^ $b;
-// => Fizz
-
-`#
-
-let string-xor-fizz-2 = `<?php
echo (
"L
[p
@@ -219,40 +227,34 @@ document '<
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- +frame{FizzBuzzとは}<
+ +frame{細長いFizzBuzz?}<
+code-block-php(fizzbuzz-normal);
- +p{
- 1から100までの数について、3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizzBuzz、それ以外はその数そのものを出力するプログラム
- }
>
- +frame{FizzBuzzとは}<
+ +frame{細長いFizzBuzz?}<
+code-block-php(fizzbuzz-normal);
+p{
- 1行あたりの最大文字数は?
- }
- +p{
- \inline-code(`if`);を並べている行が46文字で最大
+ \emph{1行あたりの最大文字数}を最小化しよう
}
>
- +frame{FizzBuzzとは}<
- +code-block-php(fizzbuzz-normal);
- +p{
- 1行あたりの最大文字数は?
- }
- +p{
- \inline-code(`if`);を並べている行が46文字で最大
- }
- +p{
- これを\emph{最小化}したい!
- }
+ +frame{1行あたり最大6文字で書いたFizzBuzz}<
+ +code-block-php(fizzbuzz-w5);
>
- +frame{細長いFizzBuzz}<
+ +frame{細長いFizzBuzz?}<
+fig-center(vconcat [
gap 100pt;
- textbox{1行あたり\emph{2文字}あれば、FizzBuzzが書ける!}
+ textbox{1行何文字あればFizzBuzzが書けるのか?};
+ ]);
+ >
+
+ +frame{細長いFizzBuzz?}<
+ +fig-center(vconcat ?:(align-center) [
+ gap 100pt;
+ textbox{1行何文字あればFizzBuzzが書けるのか?};
+ gap 20pt;
+ textbox{\emph{2文字}あれば書ける!};
]);
>
@@ -264,22 +266,28 @@ document '<
}
+listing{
* ほとんどのキーワードが書けない
- ** \inline-code(`as`);、\inline-code(`do`);、\inline-code(`fn`);、\inline-code(`if`);、\inline-code(`or`);
+ ** 書けるのは\inline-code(`as`);、\inline-code(`do`);、\inline-code(`fn`);、\inline-code(`if`);、\inline-code(`or`);のみ
* ほとんどの関数が呼べない
- ** \inline-code(`_()`); (\inline-code(`gettext()`);の別名)、\inline-code(`pi()`);
- * 文字列が書けない
+ ** 呼べるのは\inline-code(`_`); (\inline-code(`gettext`);の別名)、\inline-code(`pi`);のみ
+ * 空でない文字列が書けない
** クォート、中身の文字、クォート、で最低3文字必要
}
+ +p{
+ ではどうするか?
+ }
>
+frame{FizzBuzzを細長くする}<
+code-block-php(fizzbuzz-0);
+ +p{
+ このFizzBuzzをベースに変形する
+ }
>
+frame{FizzBuzzを細長くする}<
+code-block-php(fizzbuzz-0);
+p{
- ステップ1: 絶対に短縮できない、\emph{キーワード}を排除する
+ ステップ1: 絶対に短縮できない、\emph{キーワードを排除}する
}
+p{
\inline-code(`for`);と\inline-code(`echo`);を消す
@@ -289,8 +297,8 @@ document '<
+frame{FizzBuzzを細長くする}<
+code-block-php(fizzbuzz-1);
+listing{
- * \inline-code(`for`);は\inline-code(`array_walk()`);と\inline-code(`range()`);に
- * \inline-code(`echo`);は\inline-code(`pritnf()`);に
+ * \inline-code(`for`);は\inline-code(`array_walk`);と\inline-code(`range`);に
+ * \inline-code(`echo`);は\inline-code(`pritnf`);に
* \inline-code(`<?php`);は\inline-code(`<?`);に (要: \inline-code(`short_open_tag`);オプション)
}
>
@@ -326,48 +334,18 @@ document '<
}
>
- +frame{余談: PHP 8 系で動かなくてもいいなら}<
- +code-block-php(`$f
-=F
-.i
-.z
-.z
-;
-`);
- +p{
- 未定義の定数が評価されると、その定数の名前の文字列になる (PHP 7.x 以下)
- }
- >
-
- +frame{余談: PHP 8 系で動かなくてもいいなら}<
- +code-block-php(`$f
-=@
-F.
-@i
-.
-@z
-.
-@z
-;
-`);
- +p{
- 警告を抑制するため、\inline-code(`@`);演算子を使う
- }
- >
-
+frame{文字列リテラルの短縮}<
+code-block-php(string-xor);
+p{
文字列の XOR 演算を使う
}
+ +p{
+ 文字列をバイト列と見做し、各要素にXOR演算を適用して結合する
+ }
>
+frame{文字列リテラルの短縮}<
+code-block-php(string-xor-fizz);
- >
-
- +frame{文字列リテラルの短縮}<
- +code-block-php(string-xor-fizz-2);
+p{
ほとんどの文字列を、1行2文字以下で表せる
}
@@ -429,7 +407,7 @@ F.
gap 50pt;
textbox{任意のプログラムを動かせる!};
gap 20pt;
- textbox{\emph{Laravel}を動かせる!};
+ textbox{\emph{Laravel}でも動かせる};
]);
>
@@ -438,7 +416,14 @@ F.
gap 100pt;
textbox{任意のプログラムを動かそうとしたときの壁};
gap 20pt;
- textbox{\inline-code(`eval()`);は関数ではない};
+ textbox{\inline-code(`eval`);は関数ではないので、variable functionが使えない};
+ ]);
+ >
+
+ +frame{そしてその先へ......}<
+ +fig-center(vconcat ?:(align-center) [
+ gap 100pt;
+ textbox{ではどうやってLaravelを動かすか?};
]);
>
@@ -448,4 +433,35 @@ F.
textbox{続きは\emph{PHPerKaigi 2023}で};
]);
>
+
+ +section{|没スライド|}<
+ +frame{余談: PHP 8 系で動かなくてもいいなら}<
+ +code-block-php(`$f
+=F
+.i
+.z
+.z
+;
+`);
+ +p{
+ 未定義の定数が評価されると、その定数の名前の文字列になる (PHP 7.x 以下)
+ }
+ >
+
+ +frame{余談: PHP 8 系で動かなくてもいいなら}<
+ +code-block-php(`$f
+=@
+F.
+@i
+.
+@z
+.
+@z
+;
+`);
+ +p{
+ 警告を抑制するため、\inline-code(`@`);演算子を使う
+ }
+ >
+ >
>