Help us understand the problem. What is going on with this article?

新卒プログラマの学習ログ 〜 其の四 〜

Kotlinのあれこれ

Android StudioでKotlinを使用しながら、Androidアプリ開発に関して学んでいます。
Javaの基礎知識があればKotlinの学習は必要ないと上司から言われていましたが、全然そんなことないと思っています。(泣)

確かにオブジェクト思考を前提としたプログラミングではありますが、Javaと比較してKotlinは型推定が常識のように行われるためにいきなりライブラリの仕様等を見ると心が折れます。

基礎知識

Kotlinでは関数も、数値や文字列のなどの値のようにして扱うことができます。
そのため、変数に代入したり関数の引数として与えたり、関数の結果として返したりできます。

このような性質のオブジェクトは第一級オブジェクトに分類されます。

よくみる "::関数名" とは?

Kotlinのコードを見ているとよく::関数名のような記述をよく見ます。
以下のコードをご覧ください。

Sample.kt
fun square(i : Int): Int = i * i

fun main(){
   val functionObject = ::square
   println(functionObject(5))
   println(square(5))
}

前述したように=(イコール)を用いて関数squareを定義していますね。
この関数は引数にInt(数字)を受け取ってInt(数字)を返す関数ですね。

これをmainでは変数functionObjectの初期定義を::squareで行っています。
出力は以下のようになります。

..> 25
..> 25

squareの引数に5を与えた結果の25が二回出力されていますね!
::squareで関数オブジェクトを生成し、その結果をfunctionObjectに与えているので、
関数squareと同じ動作を実行できるようになっていますね。

どちらも引数に数値を受け取って数値を返す関数になっていることが確認できますね。
これが関数オブジェクトと言われるものの基本となる知識です。

最後に

JavaやC言語でなれている人にとってはあまり馴染みのない書き方ですね。
次回はこの関数オブジェクトを使用して、関数を引数に持つ関数高階関数に関して記事を書いてみたいと思います。

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。
いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を
「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」
とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。
(言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間
およそ410時間
どんどん更新していきます。

Nao_RandD
2020年度よりIT企業でエンジニアとしてのキャリアをスタートしました。 With Covid-19で新卒入社から完全リモート勤務という、 この新しい働き方の中であるべきエンジニア像とは何かを模索しています。 主にAndroid開発への投稿が多くなると感じていますが、 技術以外にも興味深い考え方やニュースもシェアして いけたらと思っています♪
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away