リファクタリング
レビューしていると、処理がどう流れているからわからんから、ちょっと整理させてね…… ってことがよくある。
@@ -22,22 +22,17 @@ var ResultsUtils = (() => { return active_status.includes(job.status); }; var _parseMonitoringReport = function(result) { - if(result.train_status || result.monitoring_report) { - var monitoring_report = result.train_status ? result.train_status.monitoring_report : result.monitoring_report; - result.costs = []; - result.training_errors = []; - result.validation_errors = []; - if(monitoring_report) { - Object.keys(monitoring_report).forEach((key) => { - result.costs.push(monitoring_report[key].cost); - result.training_errors.push(monitoring_report[key].train_error ? monitoring_report[key].train_error : 0); - result.validation_errors.push(monitoring_report[key].valid_error ? monitoring_report[key].valid_error : 0); - }); - result.current_epoch = Object.keys(monitoring_report).length; - } - result.train_status - ? delete result.train_status.monitoring_report - : delete result.monitoring_report + if (result.train_status || result.monitoring_report) { + var report = (result.train_status || result).monitoring_report || {}; + var indices = Object.keys(report).sort((a, b) => a - b); + var valueOf = key => index => report[index][key] || 0; + Object.assign(result, { + current_epoch: indices.length, + costs: indices.map(valueOf('cost')), + training_errors: indices.map(valueOf('train_error')), + validation_errors: indices.map(valueOf('valid_error')), + }); + delete (result.train_status || result).monitoring_report; } return result; };
こんなことしてるから、時間がいくらあっても足りないわけだけれど。
ハイレベルのプログラムかと聞かれると、これがー? っていう気持ちにはなる。 なるが。 メンバーがついてこれないことを見ると、ひょっとするとハイレベルなコードを書いてい るのかもしれない。
— いけべ (@ikb) September 27, 2017
わたしが書き直す前とあととで、どちらがプログラマー諸君にとってより読みやすいか、というのは、ほんと聞いてみたい。
いや、聞いたら、自信を失うかもしれない。