新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

Kotlinで遊んでました。値を返さない関数Unit型

2018-10-30 10:10:07 | kotlin

fun geCnt():Intは値を返す関数です。fun conterUp()は値を返さない関数です。fun counterUp():Unitと書いてもいいのですが、この場合は省略できるんだそうです。

 もう一個同じようなクラスを作ってみました。一般的には後の方が多いようにも思います。従来の考えからすると上のようにも思います。どっちでもいいのかもしれません。"(-""-)"

 体調不良のため、しばらくお休みします。(*_*;

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。20!まではLongで行けました。

2018-10-29 22:36:32 | kotlin

 

20!迄は正常ですが、21!以上はおかしくなりました。何故エラーにならないんですかね?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。ローカル関数

2018-10-29 21:49:10 | kotlin

ローカル関数はfun sumの中にfun RecursiveDoを定義してます。sumからは内部のRecursiveDoだけが見えるようです。kai((1L..100).toList())をやってみたんですが、何故か0でした。オーバーフローと出ないです?ちょっと確かめられないくらい大きい数でした。Bigとかの数値もあるんですかね?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。tailrecを使った再帰関数もう一度、またまた

2018-10-29 10:10:42 | kotlin

tailrecは何故必要かという話でした。上の図にあるように普通?に再帰関数を書くと、実行例にあるようにStachOverflowErrorが起きる可能性があります。それを防ぐためでした。tailrec fun RecursiveRuikeiでは二個目の出力が出てます。「kotlinスタートブック」の通り、自分のPCもエラーが起きました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。tailrecを使った再帰関数もう一度

2018-10-29 09:36:24 | kotlin

tailrecを使って、1から123456までの集計をしてみました。昔偉い人が子供の時に算数の問題を出されて、回答した方法です123457*(123456/2)=7620753696となるみたいです。この場合は要素がなくなった時は0で良いのでしょうが、下の図では1となるようです。Ruikeiの引数がList型とInt型では受け取り方、forが微妙に違います。多分ですが最後に0を掛けてしまわないようにですかね?最後は1を掛ける。

 実行時間を正確に測ったわけではありませんが、再帰関数は時間がかかるようです。最初と最後はすぐプリントされますが、真ん中は結構時間がかかります。

最後に各々をプリントする場合を入れてみました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。tailrecを使った再帰関数

2018-10-28 23:50:55 | kotlin

「Kotlinスタートブック」のP75をそのままにRecursiveRuikeiを作ったというか?コピーしました。RuikeiもListを受けたものに変えてみました。tailrecを使うには、もしかしたら関数部分を=で書かないといけないのかもしれません。前は{}で書いてました。

前のパターンのRuikeiを入れました。どうやら同じ関数名でも引数のタイプで上手く選んでくれてるようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。再帰呼び出し

2018-10-27 22:56:00 | kotlin

例えば5階乗=1x2x3x4x5=120で、10階乗=3628800になるようです。

1から10までの累計は55です。RubyやScalaは最後の結果がreturnされたと思いますが、kotlinでは{}の中に書いた場合は、returnは必須です。関数のタイプも必須だったと思います。Kotlinスタートブックの例題はこれとは違いますが、ちょっと難しいので後にします。"(-""-)"

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。可変長引数

2018-10-27 16:39:42 | kotlin

可変長引数と配列を引数にすると結構似てますね。この場合の集計部分は全く同じです。引数を受ける定義が違います。渡す方も微妙な違いがあるようです。同じことができるようなので、どっちか覚えておけばいいかな?"(-""-)"

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。名前付き引数、デフォルト引数

2018-10-27 13:17:56 | kotlin

名前付き引数を使えば、複数の引数があるときに順番を気にせず使えるかもしれません。デフォルトを使えば、省略時に使われる引数を指定できます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。文を持った関数

2018-10-26 21:01:36 | kotlin

fun goukei(ary:Array<Int>) : Int {の:Intを省略できない。関数の名前goukeiと変数の名前goukeiは区別されるようですので、同じでも問題ない様です。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。関数の例

2018-10-26 09:27:55 | kotlin

関数の返す値を省略できます。引数に書いてあるので、推定できるからのようです。fun square(n:Int):Int=n*nで後の方の:Intを省略できます。Kotlinスタートブックではhelloの例が"hello, $name!"とあります。${name}との違いは何なんですかね?三番目の例では、例えばval a = if()とかもかけるので違和感はないでしょう。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。関数の定義

2018-10-26 09:06:07 | kotlin

 fun succとfun nextは同じですが、=を使うか{}を使うかで少し違います。{}で定義した場合はreturnが無いと赤波線アンダーラインでエラーになります。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。再度の拡張関数

2018-10-25 21:40:51 | kotlin

上の図でDoubleクラスにplusを追加したように見えます。悩んでいたのが、Complexクラスに書いていたのでエラーになってました。これによってobj1+50.0と50.0+obj2と両方で書けるようになりました。

 

operator fun Int.plusをRationalクラスから外れたところで書きます。

import ktsp035.Rationalともう一つktsp035.plusもimportしないとダメでした。これで少しは拡張関数を分かった気持ちです。"(-""-)"

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。拡張関数

2018-10-24 22:02:02 | kotlin

上の図はStringクラスにprintout関数を追加したように見えます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinで遊んでました。packageとimport

2018-10-24 14:43:40 | kotlin

上の図でpackage ktsp035でClass等を他から見えなくします。「Kotlinスタートブック」の例題からですが、元は「Scalaスケーラブルプログラミング」から参考にしたものです。

 

上の図ではimportでktsp035のクラスを見えるようにします。private fun gcdもimportしないとダメかと思ってましたが、必要ない様です。mainの部分をコピーしたらimportが必要と判断してくれました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする