Skip to content

Commit 269ffa1

Browse files
committed
refactor: use switch pattern matching
- change `if`, `if else`, else` clause to switch pattern matching - add additional space - add missing comma on long argument
1 parent b586f55 commit 269ffa1

File tree

2 files changed

+59
-50
lines changed

2 files changed

+59
-50
lines changed

lib/src/fsrs_base.dart

+35-32
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,42 @@ class FSRS {
2626
final s = SchedulingCards(card);
2727
s.updateState(card.state);
2828

29-
if (card.state == State.newState) {
30-
_initDS(s);
31-
32-
s.again.due = now.add(Duration(minutes: 1));
33-
s.hard.due = now.add(Duration(minutes: 5));
34-
s.good.due = now.add(Duration(minutes: 10));
35-
final easyInterval = _nextInterval(s.easy.stability);
36-
s.easy.scheduledDays = easyInterval;
37-
s.easy.due = now.add(Duration(days: easyInterval));
38-
} else if (card.state == State.learning || card.state == State.relearning) {
39-
final hardInterval = 0;
40-
final goodInterval = _nextInterval(s.good.stability);
41-
final easyInterval =
42-
max(_nextInterval(s.easy.stability), goodInterval + 1);
43-
44-
s.schedule(now, hardInterval.toDouble(), goodInterval.toDouble(),
45-
easyInterval.toDouble());
46-
} else if (card.state == State.review) {
47-
final interval = card.elapsedDays;
48-
final lastD = card.difficulty;
49-
final lastS = card.stability;
50-
final retrievability = _forgettingCurve(interval, lastS);
51-
_nextDS(s, lastD, lastS, retrievability);
52-
53-
var hardInterval = _nextInterval(s.hard.stability);
54-
var goodInterval = _nextInterval(s.good.stability);
55-
hardInterval = min(hardInterval, goodInterval);
56-
goodInterval = max(goodInterval, hardInterval + 1);
57-
final easyInterval =
58-
max(_nextInterval(s.easy.stability), goodInterval + 1);
59-
s.schedule(now, hardInterval.toDouble(), goodInterval.toDouble(),
60-
easyInterval.toDouble());
29+
switch (card.state) {
30+
case State.newState:
31+
_initDS(s);
32+
33+
s.again.due = now.add(Duration(minutes: 1));
34+
s.hard.due = now.add(Duration(minutes: 5));
35+
s.good.due = now.add(Duration(minutes: 10));
36+
final easyInterval = _nextInterval(s.easy.stability);
37+
s.easy.scheduledDays = easyInterval;
38+
s.easy.due = now.add(Duration(days: easyInterval));
39+
case State.learning:
40+
case State.relearning:
41+
final hardInterval = 0;
42+
final goodInterval = _nextInterval(s.good.stability);
43+
final easyInterval =
44+
max(_nextInterval(s.easy.stability), goodInterval + 1);
45+
46+
s.schedule(now, hardInterval.toDouble(), goodInterval.toDouble(),
47+
easyInterval.toDouble());
48+
case State.review:
49+
final interval = card.elapsedDays;
50+
final lastD = card.difficulty;
51+
final lastS = card.stability;
52+
final retrievability = _forgettingCurve(interval, lastS);
53+
_nextDS(s, lastD, lastS, retrievability);
54+
55+
var hardInterval = _nextInterval(s.hard.stability);
56+
var goodInterval = _nextInterval(s.good.stability);
57+
hardInterval = min(hardInterval, goodInterval);
58+
goodInterval = max(goodInterval, hardInterval + 1);
59+
final easyInterval =
60+
max(_nextInterval(s.easy.stability), goodInterval + 1);
61+
s.schedule(now, hardInterval.toDouble(), goodInterval.toDouble(),
62+
easyInterval.toDouble());
6163
}
64+
6265
return s.recordLog(card, now);
6366
}
6467

lib/src/models.dart

+24-18
Original file line numberDiff line numberDiff line change
@@ -110,27 +110,33 @@ class SchedulingCards {
110110
}
111111

112112
void updateState(State state) {
113-
if (state == State.newState) {
114-
again.state = State.learning;
115-
hard.state = State.learning;
116-
good.state = State.learning;
117-
easy.state = State.review;
118-
} else if (state == State.learning || state == State.relearning) {
119-
again.state = state;
120-
hard.state = state;
121-
good.state = State.review;
122-
easy.state = State.review;
123-
} else if (state == State.review) {
124-
again.state = State.relearning;
125-
hard.state = State.review;
126-
good.state = State.review;
127-
easy.state = State.review;
128-
again.lapses++;
113+
switch (state) {
114+
case State.newState:
115+
again.state = State.learning;
116+
hard.state = State.learning;
117+
good.state = State.learning;
118+
easy.state = State.review;
119+
case State.learning:
120+
case State.relearning:
121+
again.state = state;
122+
hard.state = state;
123+
good.state = State.review;
124+
easy.state = State.review;
125+
case State.review:
126+
again.state = State.relearning;
127+
hard.state = State.review;
128+
good.state = State.review;
129+
easy.state = State.review;
130+
again.lapses++;
129131
}
130132
}
131133

132-
void schedule(DateTime now, double hardInterval, double goodInterval,
133-
double easyInterval) {
134+
void schedule(
135+
DateTime now,
136+
double hardInterval,
137+
double goodInterval,
138+
double easyInterval,
139+
) {
134140
again.scheduledDays = 0;
135141
hard.scheduledDays = hardInterval.toInt();
136142
good.scheduledDays = goodInterval.toInt();

0 commit comments

Comments
 (0)