Skip to content

feat: all と none を追加する - #80

Open
Javakky wants to merge 2 commits into
masterfrom
javakky/all-none
Open

feat: all と none を追加する#80
Javakky wants to merge 2 commits into
masterfrom
javakky/all-none

Conversation

@Javakky

@Javakky Javakky commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

概要(What / Why)

既存の any と対になる all (全件成立) と none (1 件も成立しない) を追加します。

変更点

  • src/all.php — PHP 8.4 の array_all() に委譲。空配列は vacuous truth で true
  • src/none.php!any($input, $callback)。空配列は true
  • tests/AllTest.php / tests/NoneTest.php — 各 7 ケース
  • composer.jsonautoload.files に 2 件追加

動作確認

  • 手動:all([], fn () => false)true / none([1, 2], fn ($v) => $v > 5)true
  • 自動:
    • vendor/bin/php-cs-fixer fix --dry-run --diff / vendor/bin/phpstan analyse -c phpstan.neon / vendor/bin/phpunit tests
    • 結果:OK (111 tests, 120 assertions) / PHPStan level 10 [OK] No errors / CS Fixer Fixed 0 of 33 files

補足(任意)

  • 引数名は any に揃えて $callback にしました (filter / collect / chunk_by も同じ)
  • noneany の否定なので 1 行委譲にして、any / all / none の 3 関数を同じ層に並べました。短絡の保証も array_any() / array_all() の 1 箇所に集約されます
  • 短絡評価は、呼び出し回数を数えるクロージャで「判定確定後に呼ばれない」ことを assert しています。空配列で一度も呼ばれないことも同様
  • キーが述語に渡ることは、キーを match の分岐に使う形で実質的に検証しています

Closes #61
Closes #62

🤖 Generated with Claude Code

Javakky added 2 commits July 27, 2026 16:14
全ての要素が条件を満たすかを短絡評価で判定する関数を追加する。
PHP 8.4 の array_all() に委譲し、空配列は vacuous truth により true を返す。

Closes #61
条件を満たす要素が一つもないかを短絡評価で判定する関数を追加する。
none は any の否定なので array_any() へ 1 行委譲し (!any($input, $callback))、
any / all と同じ層に揃える (レビュー指摘反映)。
空配列は vacuous truth により true を返す。

Closes #62
@Javakky
Javakky force-pushed the javakky/all-none branch from 9a58b9e to ac01e3d Compare July 27, 2026 07:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: none を追加する feat: all を追加する

1 participant