Files
Your Name 77ae05c28c Rename split-loop-with-lambda to slice-with-lambda
The refactoring is now published as Slice on sammancoaching.org:
https://sammancoaching.org/refactorings/slice.html

- git mv ideas/split-loop-with-lambda -> ideas/slice-with-lambda
- rename learning-hour file and update frontmatter name
- update paths in tools/rehearse scripts and report title
- update prose: 'Split Loop with Lambda' -> 'Slice with Lambda'
  in learning hour, exercise READMEs, storyboard, solution comments
- link the published Slice refactoring from the pattern draft
2026-09-29 15:47:30 +00:00

38 lines
1.6 KiB
Markdown

# IceCreamForecasting — Slice with Lambda (exercise)
Pre-factored variant of [IceCreamForecasting-Refactoring-Kata](https://github.com/emilybache/IceCreamForecasting-Refactoring-Kata):
the Q1/Q4 dead branch is stripped and the hardcoded dates are a constant now.
Everything else — including the noise in the scoring loop — is untouched.
## Task
`longRangeForecast()` is hard to test: it calls `scorer`, and `Scorer`
stands for an external weather service you must not call from a unit test.
The rest of the method's inputs are only `DATES` and `ANCHOR_DATE`.
Get it under test:
1. First get any test running that calls `longRangeForecast()` —
it will fail or be flaky, because of the dependency on `Scorer`.
2. Then use the **Slice with Lambda** mechanics (6 steps, on the handout)
so that the weather collection becomes an extracted method that takes the
weather-reading as a **lambda parameter**.
3. Stop when you have an extracted method that takes the lambda as a parameter,
and a test that passes **without** touching `Scorer`.
## Constraint
Don't change `Scorer` and don't change the *behaviour* of
`longRangeForecast()`. Compile early, compile often.
## Debrief questions
- At which step did plain **Split Loop** stop working, and why?
(Hint: what type did your introduced variable end up being?)
- There are **two** calls to `scorer` in the weather loop.
What did you do with each one?
- Could you delete either call without changing the forecast?
Try it. Why did that work?
- Where would you take this next — more extraction, or moving the method
to another class where `Scorer` is unknown?