for文でぐるぐるしてオブジェクトの内容を表示したいとき、mapとlambdaでもっとかんたんに表示させる。あとforEachも。
はじめに
Googleカレンダーの名前一覧をちらっと見たいときに、for文でぐるぐる書くのが大変なので、短くできる方法を探してみた。
mapなるもので処理を省略してみる
"for of"以外に書き方ないかな?とおもって、探していみると、mapで近いことができることを発見!
やってみた。
for ofとmap
これが、
function getAllCalendarName() {
const cals = CalendarApp.getAllCalendars();
for (let cal of cals) {
Logger.log(cal.getName());
}
}
こう
function map() {
const cals = CalendarApp.getAllCalendars();
cals.map(function (cal) {
Logger.log(cal.getName());
});
}
function(){}な部分をlambdaで書き直してみる
functionな部分は条件によって省略できるみたい。
cals.map(function (cal) {
Logger.log(cal.getName());
});
functionはアロー演算子"=>"で書き換えられる。
cals.map((cal) => {
Logger.log(cal.getName());
});
引数の"(cal)"は、引数の数が1つのときに限り()が省略できる。
cals.map(cal => {
Logger.log(cal.getName());
});
一行で収まる内容なら、{}も省略できる。
cals.map(cal => Logger.log(cal.getName()));
めちゃかんたんになった!うれしい。
forEachでもできる
今回はmapでやったけど、forEachでも同じように省略できそう。
cals.forEach(cal => Logger.log(cal.getName()));
mapもforEachも関数を引数に渡してあげているから同じことができるのかな。
一応forEachだと、結果を戻り値で受け取れないみたいだから、それによって使い分けるのもありかも。
function lambdaAndForeach() {
const cals = CalendarApp.getAllCalendars();
let returnValues = cals.map(cal => cal.getName());
// [XXX@gmail.com, 日本の祝日, 誕生日]
Logger.log(returnValues);
returnValues = cals.forEach(cal => cal.getName());
// null
Logger.log(returnValues);
}
まとめ
ちょっと調べてコメントアウトしておきたいときとか1行だと便利だなー。
単純な処理なら読みやすいし使っていこうとおもった。