個人で制作し、クラスでも利用しているJava課題の紹介(Lambig)
こんにちは、株式会社クラス システム開発本部 Lambigです。
社内外でメンタリングを行っている関係で、
手ごろな課題を教材にハンズオンや実演を行いたいことが多々あります。
私がメインで扱うテーマは「何か出力を得る※1」ことよりも
「出力は得られるが、今後の改修に耐えられない」
「追加要求が発生したのでうまく取り込みたい」
「特定のケースでうまく動かない」
などの解決を図ることが多いので、
問題文だけではなく既存コードが必要になってきます。
※1 出力を得る実装の演習をするだけなら、CodeWarsあたりで十分だと思っています。あれは良いサイトです、コードの品評会ができるところとか。
↑は実プロダクトでよく行きあたる課題なのですが、
プロダクトを持ってきて抽象化すると「おけいこ感」が強くなってしまい
楽しくないので、最初から何かでっちあげてしまった方がよいと考えて
こさえた課題が
こちらです(随時開発中)。
例えば
public List<Book> シチュエーション1_本のリストに重複なく本を足したい(List<Book> books, Book... toBeAdded) {
var result = new ArrayList<>(books);
var actualAdditions = new ArrayList<Book>();
for (Book candidate : toBeAdded) {
var foundDuplicationInList = false;
var foundDuplicationInAddition = false;
for (Book alreadyInList : books) {
if (sameBook(candidate, alreadyInList)) {
foundDuplicationInList = true;
break;
}
}
if (!foundDuplicationInList) {
for (Book actualAddition : actualAdditions) {
if (sameBook(candidate, actualAddition)) {
foundDuplicationInAddition = true;
break;
}
}
if (!foundDuplicationInAddition) {
actualAdditions.add(candidate);
}
}
foundDuplicationInList = false;
foundDuplicationInAddition = false;
}
result.addAll(actualAdditions);
return result;
}
このような見るだにおつらいコードを課題として提供し、
改善をハンズオンで実践していくなどして利用しています。
クラスの開発組織でも、特にRxJavaを採用しているので
そのキャッチアップのために、プロダクトから直接学ぶだけでなく
コードベースの全体を見渡して手を動かせる課題というのが欲しく、
RxJavaの課題を利用した演習を提供、利用しています。
(外部でも好評なネタだったので、詳細はいずれ紹介できればと思います)
例によって、課題自体は個人的に開発したものなので、
そのフィードバックはこちらへ
記事へのフィードバックはコメントにお願いします。