【Kotlin】maxOfとmaxByOrNullの違い
こんにちは、ミツです。
maxOfとmaxByOrNullの違いについて、気になって調べたのでメモを残しておきます。
結論から言うとこの二つです。
1、空のリストが入ってきた場合、エラーになるかNullになるか
2、戻り値がラムダ式の入力か出力か
公式ドキュメント
公式のドキュメントを見てみましょう。
1の空のリストが入ってきた場合について
maxByOrNullの説明には空の場合はNullが返されると書いてあります。
null
if there are no elements.
一方、maxOfの説明には空の場合はNoSuchElementException
がスローされると書いてありますね。
NoSuchElementException
- if the array is empty.
2の戻り値について
戻り値の型を見てみるとmaxByOrNullの説明には->の左側(ラムダ式の入力)の「T?」が返されると書いてあります。
一方、maxOfの説明には->の右側(ラムダ式の出力)の「R」と書いてあります。
実際に確かめてみよう
fun main() {
val temp: List<Int> = emptyList()
println(temp.maxByOrNull{ it }) // null
// println(temp.maxOf{ it }) // java.util.NoSuchElementException
val temp2: List<Int> = listOf(1, 2, 3)
println(temp2.maxByOrNull{ it * 2 }) // 3
println(temp2.maxOf{ it * 2 }) // 6
}
tempで結論1の検証、temp2で結論2の検証してます。
まとめ
戻り値が違うのはちょっと驚きました。
適切に使い分けていきたいですね!
【実体験】リーダーって何すればいいの?
こんにちは、ミツです。
今回は会社でプロジェクトリーダーをやってみて学んだことを紹介したいと思います。
このプロジェクトが始まりリーダー決める際に、何事も経験が大事だと思い立候補してリーダーになりました。 なったはいいのですが、
リーダーって何?何すればいいの?
とわからなくなってしまいとても悩みました。こんなんでやっていけるのかなと不安になり、立候補しなければよかったと思いました。
が、普段の業務の中でいろんなMTGに出たり、いろんなリーダーを見ていく中でリーダーの役割というものがわかってきました。 もちろん、完璧に網羅できているわけではありませんが、一応プロジェクトとしてはリリースを無事終えることができたので一旦区切りをつけてこれまでの学びをまとめていきたいと思います。
ちなみにこのテーマで社内勉強会で登壇したので、その時のスライドを交えながら書いていきます。週一で定期MTGを設けていたのでその前と後という観点で切り取っています。
意識するようになったこと(MTGの前)
MTGの前に意識するようになったことということで、まずプロダクトを作るためにするべきことを列挙すると言うことです。一言で言うとタスクを洗い出す、ですね。例えばwebアプリだったらログイン機能をつけたいだったりプルダウンメニューつけたいだったり。
アプリ自体の機能的なこと以外も初リリースだったら使い方を書いたマニュアル作んなきゃだよねだったり告知の準備しなきゃだよねだったり。大事なのは目標を達成するためには何をしなくちゃいけないんだろう?と考えることです。
これがメンバーとリーダーの大きな違いの一つかなと思います。メンバーも担当したタスクについて考えこなしていきますけど、そのタスク自体を生み出す、考え出すのがリーダーの仕事だと思います。
MTGの前にはタスク洗い出す以外にも、洗い出したタスクに優先順位をつけたり、機能の仕様やユーザからの方々の対応方法など話すべき議題をあらかじめ考えておくことが大切だと感じました。
意識するようになったこと(MTG中)
次にMTG中編です。MTGの中で意識したことは4つありますが中でも大事だなと思う「4. 意見を求める」について書きます。
最初私はリーダーがすべての物事を決めなければいけないと思っていました。しかしそうではないなと他のリーダーを見て思いました。確かに最終決定権はリーダーにありますが、その決定内容を詰める段階メンバーに意見を聞くことも大切だなと、聞いてもいいんだと感じました。
例えば先ほどMTGの前にタスクを洗い出すことが大事と言いましたが、それについても不安な時はメンバーに「リリースまでにやらなきゃいけないタスク洗い出してみたけど抜けないかな?」みたいに聞いていました。
一人で考えると大変ですし、考えが偏ってしまいますからそう言った意味でメンバーに意見を求めるというのはとても有効な方法だと思います。
こうすればよかったなと思うこと
これまで書いてきたことの中で、タスクを洗い出してそれを割り振って進捗確認してとチーム内のことは今回しっかりできたかなと思うのですがチーム外のこと、いわゆるステークホルダーとのやりとりができなかったなと感じます。
私は会社員ですから当然プロジェクトを任せてくれた上の人がいます。その方に全然進捗の共有ができませんでした。自分はメンバーに毎週毎週進捗を聞いているのに笑
なので次リーダーやる機会があったらちゃんとステークホルダーには随時プロジェクトの進捗を報告するようにしたいと思います。
終わり
今回書いたことはどこかの書籍に書いてあったことではありません。私がみたり聞いたりしたことを実際やってみて大事だなと思ったことです。
書籍ほど説得力はないですが、少しでも同じようなことで悩んでいる人の役に立てたら嬉しいなと思います。
リーダーって色々考えたり責任が乗っかってきて大変な分、プロジェクトが成功した時の達成感はとても大きいし、その成功体験は自信につながります。
そんなことも今回感じました。
最後まで読んでいただきありがとうございました。
【一服】たばこの銘柄おすすめ三選
こんにちは、ミツ(仮)です。
たばこっておいしいですよね。 体に良くないとわかっていてもついついお酒飲んでるときや仕事でひと段落したときに吸っちゃいます。喫煙歴でいうと5年ぐらいです。最近は火をつけたまま口の中に入れるっていう宴会芸みたいな技を練習中です。
今回は私がこれまで吸ってきたたばこの中でもおすすめの銘柄を3つ紹介したいと思います。
メビウス・ワン
まず一つ目はメビウス・ワンです。箱のデザインがシンプルな割にニコチンとタールの量がめちゃくちゃ多いんですよね。一気にまわります。しかも値段も安い。コスパ最強。とりあえずニコチン取りたい人におすすめです。
わかば
二つ目はわかばです。これは結構有名ですかね。その名の通り葉っぱの味がします。しかも結構リアルな葉っぱ味で土感も少しあります。子供のころ森を駆け回っていたころを思い出します。幼少期のころを思い出したい人におすすめです。
エコー
最後に紹介するのはエコーです。結構マニアックな銘柄なので知らない人もいるかもしれません。エコーの最大の特徴は一本がめちゃくちゃ太いことです。直径3cmあります。なのでひと箱に4本しか入っていません。吸うときは気合を入れて吸いましょう。その代わりとても満足感が高くこれを吸った日は一日中高揚感を感じます。普通のたばこに飽きてきてしまった人におおすすめです。
終わり
エイプリールフールネタです。書いてあること全部嘘です。ちょっとふざけてみたくなっちゃいました。少しでもクスッと笑ってくれたらうれしいです。
最後まで読んでいただきありがとうございました。
【雑談力】雑談は、普段の会話とは、全く違う。
こんにちは、ミツ(仮)です。
今回は「超雑談力」という本を読んでみたのでその感想を書き連ねたいと思います。
最近初めましての人に会う機会が多くて、だいたいそういう時って雑談するじゃないですか。
ただ、なかなか盛り上がらないんですよね。いや、最初は盛り上がるんですけど少し経つとお互い話題が尽きて沈黙が流れる的な。
そんなことを悩んでる時に the! みたいなタイトルの本があったのでつい手に取ってしまったという感じです。
本の概要
まず著者はこのように言います。
「雑談は、普段の会話とは、全く違う。」
普段の会話つまり、おしゃべりというのは気心が知れた友人や家族とするもの。 一方、雑談というのは会社の上司や初めて知り合った人のように微妙な間柄の人と会話することで、 おしゃべりとは全く別物だと著者は言っているのです。
別物であるゆえに普段のおしゃべりの感覚で喋ってしまうとうまくいかないと、雑談に適した話し方つまり雑談力を身につける必要があるのです。
この本はそんな著者の考えのもとNG例とOK例とを挙げながら36個の雑談のコツを解説してあります。 今回はその中から個人的に面白いな、使ってみようと思ったものいくつか紹介します。
雑談は情報のやり取りではない、気持ちのやり取りである
いくつかのコツで横断的に言われていることなんですが、これが雑談の超基本的なルールとして語られています。 「自分がどう感じたか、どう思ったか。」そんな、言ってしまえばどうでもいい、今後役に立ちそうもないことが大事なのです。
でも確かにそうですよね。例えば、昨晩地震で揺れたして、
「昨日の地震、震源はどこどこで震度は幾つで津波の被害もあったそうですよ」
って言われるより
「昨日の地震があってめっちゃ怖かったです。部屋中ものが散らばって大変でした。」
って言われた方が面白くありません??もっと話し聞きたい、広げたいってなりますよね。
僕はこれを読んでこれから自分が話すときは、積極的に自分がどう思ったかを情報に付け加えて話そうと思いました。 じゃあどうやって気持ちのやり取りをすればいいのか、という具体的な方法もこの本では解説しています。
趣味はなんですか?と聞いてはいけない
「趣味はなんですか?」ってよく聞いちゃいますよね。相手の得意分野を聞いて、自分と共通点があれば無論盛り上がりますし、 共通点がなかったとしても、相手に興味を持って深掘りすることで話を広げることができますからね。
ただこれよくないらしいです。 何が良くないかっていうと、相手の好きなことを聞くこと自体は正解なのですが聞き方がよくないとのこと。
「趣味はなんですか?」と聞かれると相手は
「この人の趣味はどのレベルのことを指しているのだろう。。」 「趣味と胸を張って言えるものなのだろうか。。」
と色々考えてしまいます。
この内容を相手に聞くとしたら「最近はまっていることはなんですか?」と聞くのがいいです。 これは趣味などという堅苦しいものではなくただただ最近ハマっていることを答えればいいので楽ですよね。
つまり、「趣味」を「ハマっていること」に言い換えようってことです。 これは確かにと思いました。他にも言い換えパターンとして
「何かこだわってるんですか?」より「何か特別なことしてるんですか?」と聞く
というのも紹介されていました。 このようなちょっとした言葉使いって大事ですね。
その他
ちょっと思ったより文量が多くなってしまったのでここからは箇条書きで。
「全然オチのない話なんですけど、いいですか?」と最初に言ってしまう。そうすることで話す側も聞く側も安心して雑談することができますね。
「気づき + いいね」。「髪きった?」と気づくだけで満足してましたけど、似合ってることを付け足して言うかどうかで相手の受け取り方もだいぶ変わるなと感じました。
終わり
この本を読んだ感想としては、微妙な距離感の人たちと会話する時には使えそうだなと思いました。 個人的にはもう少し近しい距離感の人との会話で使えるコツをもっと知りたいなと感じました。
ともあれ上記に書いたようなことは近しい距離感の人との会話でも使えそうなので今後の雑談生活に生かしていきたいなと感じました。
書き方的には文字も大きく、色やイラスト、会話の例が織り交ぜてあり、読書初心者の僕でもすらすら読めましたので、 読書始めてみたいけど最初から難しいのはちょっとな、、という人にもオススメです。
普段会社の上司や取引先、ご近所さん付き合いに悩んでる方はぜひ読んでみてはいかがでしょうか。
最後まで読んでいただきありがとうございました。
【HTML・CSS・JavaScrip】自力でプルダウンメニュー作ってみた
こんにちは、ミツ(仮)です。
最近ほんのちょっとフロントの勉強をしてて、その理解を深めるために自力でプルダウンメニューを作ってみました。
どういう思考回路で作ったのかっていうのと、その中でハマった場所や初めて知ったことを紹介していけたらなと思います。
この記事の「自力でプルダウンメニュー作ってみた」の「自力」ってどういうこと?って話なんですが、ここではググる時に「プルダウンメニュー」という単語を使わないという意味です。
例えば「css プルダウンメニュー 作り方」とかそういうのはなしです。 答えを見ちゃうとそれ以外にやり方が浮かばなくなってしまうので。
ステップ1:ホバーされた状態の表示を作る
まず、HTMLとCSSでホバーされた状態の表示、つまり最初から子メニューが出てて、どこをホバーしても何も動かない状態を目指します。
ここはあまり沼にハマることなくサクサクできました。
初知りの情報としてはli要素(箇条書き)を横並びにするときはdisplayをinline-blockにすると簡単ってことですね。 HTMLの要素って実はブロック要素とインライン要素に分かれてて、どちらも特性を持ってます。
そのうちの一つでブロック要素はwidthやpaddingで余白の調整ができるんですけど、インライン要素は余白の調整ができないんですよね、勝手に中身のサイズに合わせちゃって。
そこで、インライン要素の性質を持ちつつ余白を調節できるようにしたのがインラインブロック要素、らしいです。
それとインライン要素の特性として要素が横に並ぶらしいです。なので今回は余白も調節したいし、横並びにしたいので以下を記述したって感じですね。
display: inline-block;
ステップ2:ホバーされた時に子メニューが出るようにする
土台はできたので次はJavaScriptで動きをつけます。
どう動きをつけるかっていうと最初は親メニューのみ表示されていて、親メニューをホバーしたとき子メニューが出てくるようにします。
jQueryで要素を追加できることは知っていたので、これも比較的簡単でした。 初知りの情報としてはやはり.hover()ですかね。これはマウスを要素に重ねた時と外した時をトリガーに処理を実行してくれる関数です。 書式はこんな感じ。
$('セレクタ').hover( function () { //マウスが重なった時の処理 }, function () { //マウスが外れた時の処理 });
これがわかってしまえばステップ2も難なくできました。
ステップ3:子メニューを消す
問題のステップ3。ずっと子メニューが出っぱなしだと困りますからマウスを外したら子メニューを消す処理を追加します。ここで大ハマりしました。
さっき貼った書式に従って書けばいいじゃん!って思うじゃないですか、僕もそう思ってやってみたんですけどダメだったんですね〜
もう少し具体的にいうとこんな感じのコードを書いたんですけど
parentMenu.hover( function () { $('.parentMenu-container').after(childMenu); }, function () { $('.childMenu').remove(); });
これだと親メニューから子メニューにマウスを動かした場合も親メニューからマウスが外れた瞬間に子メニューが消え去ってしまうんですね。
ほんとにはまりました。.hover()をネストで書けばいいじゃないかとか、別のホバー関数ならいけるんじゃないかとか、クラスを追加してまとめて判定すればいいんじゃないかとか仕事終わりの回ってない頭で必死に考えました。
が、全部ダメで二日ぐらい進捗なし。この時ばっかりは答えを見たくなりました。 やっぱり疲れた頭でグダグダ考えてたのがいけないと思い、一回落ち着いて整理してみました。
結局親メニューから外れた時に子メニューにホバーされていたら消したくないんだよな
→つまり子メニューにホバーされているかどうか判定できればできそうだ
→「jquery ホバー 判定」検索
→ jQuery(":hover")
なんとjQuery(":hover")で現在ホバーされている要素を取得できると。 これがわかってからは早かったです。jQuery(":hover")は重なってる要素も全てホバー判定するので箇条書きだったらliやulなど複数のホバーされている要素を取得します。
ので、.each()で回して子メニューが含まれていない場合は.remove()すればいいですね。ほんとは.inArray()とか使いたかったんですけどうまく動きませんでした泣
parentMenu.hover( function () { $('.parentMenu-container').after(childMenu); }, function () { let hoverChildMenu = false; jQuery(':hover').each(function(index, element) { if(element.className == 'childMenu') { hoverChildMenu = true; } }) if(!hoverChildMenu){ $('.childMenu').remove(); } });
ステップ3の最終形はこんな感じ。
ステップ4:アニメーションをつける
ステップ3の時点でもいいっちゃいいんですけど、ちょっと物足りないなと。そう思ったので、ホバーされた瞬間「バッ!」って感じじゃなくて「シュン!」って感じになるようにアニメーションを最後につけたいと思います。
ググってみると、cssでアニメーションをつける方法の一つとしてanimationプロパティと@keyframesを使う方法があることを知りました。
簡単に説明すると@keyframesで変化させるcssの「プロパティ」と「その値」を設定して関数のようなものを作ります。
そしてその指定した動きをつけたい要素のスタイルとして、animationプロパティで先ほど作った「関数」と「アニメーションの設定(秒数とか回数とか)」するとアニメーションがつきます。
具体的にいうと@keyframesはこんな感じで使います。
@keyframes slideIn { 0% { opacity:0; transform: translateY(-30px); } 100% { opacity:1; transform: translateY(0px); } }
@keyframesの横の「slideIn」というのが関数名みたいなものです。で、そのかっこの中で0%と100%という風に動き始める前のプロパティ値と動き終わりのプロパティ値を設定します。この差分がアニメーションとして動くわけです。今回はスライドインさせたいので透過度とY座標をいじっています。
で、この定義した「slideIn」をanimationプロパティでこのように指定します。
.move { animation: slideIn 600ms ease 0s; }
指定しているプロパティ値の意味なんですけど、左から「@keyframesで定義した関数名」「0%〜100%に変化するまでの秒数」「アニメーションの進行度合い」「アニメーションが始まる時間」を表しています。他にも4つほどアニメーションの設定が可能です。これに関してはこちらの記事がびっくりするほどわかりやすかったです。
【CSS3】@keyframes と animation 関連のまとめ - Qiita
最後にこうしてできたスタイル.moveをホバーされたら子メニューの要素に追加する、という処理を、ステップ2、3で書いた.hover()に記述(4行目)ことで、子メニューが「シュン!」って感じで出てきてくれるようになります。
parentMenu.hover( function () { $('.parentMenu-container').after(childMenu); $('.childMenu li').toggleClass('move'); }, function () { let hoverChildMenu = false; jQuery(':hover').each(function(index, element) { if(element.className == 'childMenu') { hoverChildMenu = true; } }) if(!hoverChildMenu){ $('.childMenu').remove(); } });
終わり
今回「自力で」プルダウンメニュー作ってみたわけなんですけど、まあ大変でしたね。 まだまだ知らないことたくさんあるなと、もっと勉強しなきゃなと思いました。
ただ今回少しでも知らないを知ってるに変えることができてよかったと思います。ホバーやアニメーションとか今後使いたい場面多そうです。
また、完成度的にはとても満足してます。自分で作ったとは思えないですね。よくやったと自分を褒めてあげたいです。普通のサイトにあってもおかしくなさそうですよね? ね?笑
とにかく完成してよかった!
最後まで読んでいただきありがとうございました。
ソースコード
【マリオカート8DX】速攻で走れるようになる方法
こんにちは、ミツ(仮)です。
今回は僕の大好きなゲームマリオカート8DXにおいて、速攻でうまくなれる方法を紹介します。
自分はswitchやマリオカートのソフト持ってないから関係ないなと思った方ちょっと待ってください!
マリオカートなんて誰でも知ってる国民的なゲームです!売上本数で見てみると、あつ森(3,118万本)やスマブラ(2,285万本)を抑えて堂々の一位(3,341万本)です。
しかも、発売から4年が経とうとしているとしている今でも2020年4月~12月の間に864万本売り上げているとんでもないタイトルです。
そんな国民的ゲーム、いつどこでプレイする機会に遭遇するかわかりません!友達の家だったり、会社のレクリエーションだったり、、、
そんな時、この人ゲームうまいんだ!かっこいいな!と思われるようにこの機会にコツだけ押さえておきましょう!
ハンドルアシストをつける
まず一つ目、ハンドルアシストをつけましょう。マリオカート8DXにはハンドルアシストという機能があり、これはいつでも有効にしたり無効にしたりできます。
具体的にどういったものかというと、ダートをかまない、コース外に落ちません!
ダートに突っ込もうとしたり、コース外に落ちそうになったら透明な壁が発生し、自動で軌道修正してくれます。いわば補助輪のようなものです。
初心者の方がうまく走れない原因は大体さっき上げたダートに突っ込む、コース外に落ちるなので、これらがなくなるだけでとんでもなく速く走れます。
まずCPUにはまけないでしょう!
ハンドルアシストをつけることで一つだけウルトラミニターボが出せなくなるというデメリットがあるんですけど、そもそも初心者の方がウルトラミニターボを出すのは難しいのでそこまで気にすることはないでしょう。
ハンドルアシストは、カートを選ぶタイミングで+ボタンを押すとステータス画面が現れるのでそこでLボタンを押すことでオンにできます。
また、レースが始まった後でも+ボタンで一時停止してからLボタンを押すことでハンドルアシストをオンにすることができます。
アイテムを使う
2つ目は、アイテムを使いましょう。何当たり前のこと言ってんだと思われるかもしれないですが、初心者の方だと意外となれない操作に集中してしまってアイテムを使い忘れるってことがあるんです。
マリオカートのアイテムってめちゃくちゃ重要な要素で、走力とアイテムが占める割合でいうと5:5ぐらいで、うまく走るのと同じぐらいアイテムをうまく使う技術が重要だと個人的に思います。
で、マリオカート8DXってアイテムを一度に2個までにしか持てなくて、アイテムを2個持った状態でアイテムボックスを割ってもアイテムもらえないんですね。
これではとても損しています。勝ちに必要な要素を半分捨てて縛りプライで戦っているようなものです。
ですので、アイテムを持ったら次のアイテムボックスを割るまでになんとしても持っているアイテムを使い切りましょう。
どんなアイテムを持っているかが気にしなくていいです。基本的に使って自分が損するアイテムはないので。脳死でLボタンを押しましょう!
終わり
今回はマリオカート初心者向けに速攻でうまくなれる方法を紹介しました。
- ハンドルアシストをつける
- アイテムを使い切る
この2つを覚えておけばいざというときに役に立つはずです。
でも、本当にすごいゲームですよね。
発売から4年たっても売り上げ伸ばしてて、しかも2018年9月19日を最後に主要なアップデートはされてませんからね(笑)
一刻も早いマリオカート9の発売が待たれます。
最後まで読んでいただきありがとうございました。
【ビジネス用語】新卒一年目で身に着けたかっこいい横文字単語+α
こんにちは、ミツ(仮)です。
今回は僕が新卒一年目で身に着けたビジネス用語を紹介したいと思います。
「この案件はこれでフィックスです」
「エビデンスとっといて」
「次のMTGがあるので、失礼します」
え?
と、
お願いだから日本語で言ってくれ
と、そう思っていた僕ですが、1年もその環境に身をおいているとだんだん自分も使うようになっていました。
どのくらい習得したのかなと一覧で見てみたいなと思ったので、今回はビジネス用語についてまとめていきます。
アサイン
意味:担当する。担当者になる。
例文:「あの案件にアサインされる」
アジェンダ
意味:目次
例文:「こちらが今回の会議のアジェンダです」
エビデンス
意味:証拠
例文:「このテストのエビデンス取っといて」
エスカレ
意味:上司に報告する
例文:「見つけたバグをエスカレする」
サマリー
意味:要約
例文:「こちらが前回の会議のサマリーになります」
チケット
意味:仕事、タスク、課題
例文:「チケットを切る」=「タスクを起票する」
ナレッジ
意味:知識、知見
例文:「ナレッジを蓄積する」
ファシリテーション
意味:司会
例文:「次の会議のファシリテーションお願い」
フィックス
意味:変更、確定
例文:「アプリケーションのバグが発覚したのでフィックスが必要だ」
「このスケジュールはこれでフィックスです」
MTG
意味:ミーティング、会議
例文:「次のMTGがあるので、失礼します」
よしなに
こちらは横文字単語ではないですが社会人になってから知ったとても便利な単語として紹介したいと思います。
便利なのですが、だいぶ意味があいまいなので乱用注意です(笑)
意味:いい感じに
例外:「この資料よしなに修正しといて」
なんでみんな横文字を使うのだろう??
既にみんな使っているから
すでに周りに浸透してしまっているので日本語の単語で説明するより横文字単語を使ったほうが意味が伝わりやすのではないでしょうか。
まさに、郷に入っては郷に従えですね。
かっこいい
単純にかっこいいから(笑)
僕だけかも。
こういう単語使ってると社会人感でますよね。
終わり
こうやって書き出してみると意外と少ないですね。
逆に言えばこれぐらい使えれば何とか生きていけるということでしょう。
まだ何にも知らなかったころの初心を忘れないようにしたいですね。
最後まで読んでいただきありがとうございました。