Kotlin 5
■ このスレッドは過去ログ倉庫に格納されています
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう ※前スレ https://mevius.5ch.net/test/read.cgi/tech/1531818027/ >>552 怖いなぁ。そのコード。 俺、さっき、setNameってメソッドを作ったら、clashしてるって怒られた。 clash = conflict って意味らしい。 java.lang.StringのsetNameメソッドとコンフリクトしてるから、コンパイルしないんだって。 そういうことあるのか でもIntがintじゃないのってintを変数名で使ってもいいよっていう意思を感じるんだよなあ val hoge : Hoge ってすることを考えると val int : Int も自然な気がする ああでもjavaは予約語でintだめなのか やっぱりやめておこう そもそも逆コンパイルしたソースじゃないんだから 意味のある変数名付けなよ macOS10.14.3 AndroidStudio3.4 環境です。API Referenceを参照するには、どうすれば? Command-Jで起動するかと思いきや?何も起こらないっす。 Webサイトへ行かないとダメなのかな? >>558 see the hit result of Help>Search(Documentation). You can retrieve the documents by ctrl-J@macOS as well. >>555 とりあえず変な癖をつける前に『リーダブルコード』を読んでくれ、頼むから リーダブルコード読みやすいしわかりやすいし為になるし 書いたやつ神 >>562 >リーダブルコード この本そんなに良い本なのか? ペラペラ見たことあるけど、すでに知ってること、というか、実践していることしか書いてなかった。 >>564 じゃあその本に書いてないことが書かれた本を出してくれ。Kindle版だけでもいいから。 >>565 知っていることを再認識させてくれる良書ではある 何でIDが同じになるんだよ 同じプロバイダーなのか たまーに同じID出ることあるな。ものすごく希だが。 きっと今日は良いことあるよ。あと3時間40分ぐらいで終わるけど。 >>565 嘘じゃない。 ああぁ。俺は間違ってないんだな。という感じ。 まあ、詳細に読んだわけでは無いし、プログラマが知るべき97のこと、って本にも似たような事が書いてある。 Matzも「名前重要」なんて事を、97本に寄稿している。 プログラミング作法、なんかの方がよっぽど良かったな。俺には。 >>569 って事はHash algorithmがpoorってこった。 >>570 >Matzも「名前重要」 私の設計上の座右の銘は「名前重要」です。あらゆる機能をデザインする時に、私はその名前にもっともこだわります。 courtesy of Matz プログラミング作法 プログラム書法 ソフトウェア作法 全てブライアン・カーニハン御年77歳の名著 >>571 まあそういうことだな。 こんな掲示板でrichにしてどうするって感じはするが。 >>566 じゃぁ、一つ俺の考え方を! 狭いスコープの中を生きる変数は、名前が短くても良い。 e.g. str1 = “OK” 広いスコープの中を生きる変数の名前は、長い名前が必要。 e.g. numberOfBooks = 100 何時いかなる時も、意味ある変数名をつけるのは、俺は反対だ。 変数名を考える事に、時間が惜しい時もある。 やはりプログラミングも茶道とか華道とかと同様にプログラミング道を作ってわびさびが必要な時代が来たのかも知れないな。 >>576 そ、ループ変数なんて i, j, k, ....nで良いやん >>576 変数名を日本語にすれば良い。 ソース丸ごと世界に公開する予定がないならその方が分かりやすくて良い。 日本語知らないやつには難読化して軽くプロテクトが掛かった状態にもなる。 >>581 昔、英語が出来なかった時には、 kabuPrice とか kabuka なんて恥ずかしい名前使ってたけど、 今では、 sharePrice でないと、code reading時にストレス感じるわぁ。 val 感じ = "感じ" print(感じ) なんと、warningは出るが、実行可能。 Qiita見ながらKotlin修行中だけど、 Jump Command便利そう。 return@forEach continue@loop return@loop とか言うやつ。 これSwiftに欲しい。 そんなことより、API referenceってかDocumentをofflineで見る手段、どうしてる? Zeal, Velocity, Dashなんかを使ってるの? Android StudioでAppCompatActivetyを引くと android.support.v7.app.AppCompatActivity public AppCompatActivity() Gradle: com.android.support:appcompat-v7:28.0.0@aar たったコレだけしか表示されないっす。 >>585 便利な反面1歩間違えると悲惨なコードになりそうだな ごめん間違えた、SwiftにあるからKotlinに欲しいって読み違えた Xamarinのライセンス買ってくる goto文みたいに次にどこに行くのか読みにくいって意味じゃないかな そんなことはないけどね 変数名漢字って結構有りだと思う 平均からすれば英語かなり必死に勉強したほうだと思うけど、ネイティブからすれば変な英語使ってるって自覚あるし ネイティブ的な感覚がないから、命名には常に苦労する もちろん特定用途でしか使えない手法だけど、やっぱり母国語ってわかりやすいよね 英語圏のやつらにスーパハカーが多いのはそういう理由もあるよな、母国語でプログラムできるのうらやましいわ >>594 英語人口20億、英語母語5億 くらいじゃない? チェコ、ロシア、ルクセンブルグにHacker多い印象が俺にはある。 Constructorの書き方がムズイ。 primery, secondary constructorとか、Swiftには無いし。 Kotlinスタートブック、はしばらく様子見。今の所買わない方向で… だって、2016年の本って、情報が古そうだし。 そのうち在日ユダヤが「日本人にベーグル盗まれた」なんて狂言やりそう >>594 日本語固有のややこしい漢字の名称を無理やり英語にするよりはそのまま使った方が可読性もはるかにいいわな 何か不都合が起きたらIDEでリネームすりゃいいだけの話だから、全然ありだと思う 俺はテストケース名は日本語がんがん使う >>596 Swiftの designated initializer ≒ Kotlinの primary constructor Swiftの convenience initializer ≒ Kotlinの secondary constructor >>577 勧めるものじゃないけど、一応疑似的にならば https://ideone.com/7lTdsi class A {} private val xname = WeakHashMap<Any,String?>() var A.name: String? get() = xname[this] set(v:String?) { xname[this] = v } >>602 Kotlin day3の俺には、なぜAのインスタンスがnameプロパティを持つのか? 良く解らん。 Rubyみたいに、Aを再オープンしてるのか? >>604 fun mainの外でthisは何を指してるのだ? >>605 >fun mainの外でthis ってのはMainKtのインスタンスってことか? うぅーん。後で確認。 fun main(args: Array<String>) {} in a file called Main.kt will compile to something like: public class MainKt { public static void main(String[] args) {} } >>604 602は拡張プロパティとシングルトンのWeakHashMapを利用している 詳細はgoogleで 拡張プロパティ: 見た目はプロパティだが実際のところ staticメソッドのシンタックスシュガー fun A_name_get(thisObj: A): String? { return xname.get(thisObj) } println( a.name ) ↓ println( A_name_get(a) ) WeakHashMap: キーがGC対象となるのを阻害しないMap aとnameの関連付けはここに入っている aがへの参照が無くなったら、nameへの関連付けもCG対象になって消える >>607 >拡張プロパティ 気になる! Rubyの特異メソッドみたいなもんか? 特異メソッド:クラスに住んでるメソッドとは異なり、オブジェクトに住んでるソレ! >>608 特異メソッドとは違うみたい。 Rubyのクラスの再オープン、オープンクラス、monkey patching とか言う邪悪なテクみたい。 Dateクラスに本来備わってないyesterday, tomorrowとかいうpropertyを追加したりできる。 うぅーん。 top level でthisが何を指しているのか? よく解らん。 >>610 きっとthisは、nameプロパティーが呼ばれるまで定まらなくて、nameプロパティーのレシーバー(a1, a2)の事なんだ。 と言う事にしておこう。 拡張関数、拡張プロパティー、が必要になった時のメモ Kotlinの拡張関数と拡張プロパティについて https://qiita.com/RyotaMurohoshi/items/4b958af1d23da6d91a61 >ID:ZqBzQREh 日記は自分のブログでやってくれ 散々言われてるみたいだけどまずとりあえずググる習慣をつけなさい 君はしなくていい回り道が多すぎる >>602 なるほど外のmapに入れられたのか、盲点だった それとweakhashmapなんてあったのか初めて見たわ >>547 30分で…の記事、2日かけてようやくinfix記法のところまで読めた。 多分費やした時間は6hr以上。 全然30分じゃない。 なんと、キーワードになっている識別子もエスケープ可能! 例:isと言う名前のメソッドも呼び出せる。 foo.`is`(bar) こんな感じ! Qiitaの30分で…の記事、走り読みした。約8hr位要した。 Vim内でチョコチョコ試運転しながら、走り読み。 お疲れ様でした。▶俺 レシーバー付き関数リテラル、がよく解らんかった。 クラス移譲、プロパティー移譲 byとか使う奴。こんなのSwiftには無かったなぁ。 >>596 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 太郎本を買っていない香具師は、モグリ! Kotlin は、swift とは似ていない Kotlin は、Groovy を静的にしたもの。 つまり、Ruby, JavaScript の系統 オブジェクト指向・関数型のミックス > 読みやすい > if (length > 10 ) > > 読みにくい > if (10 < length) その主観は慣れによる、俺にとっては前者の方が読みにくい うちでは「物差しの向きに一貫性を持たせる」という指針でやっている その上で統一のため原則として「小さい方を左に書く」 よって >, >= を使わない if (10 <= length && length < 100) まぁRangeやRectでメソッドでの判定をすることも多く そういう場合は左がどうこうというのは無いが >>626 >if (10 <= length && length < 100) if (length >= 10 && length < 100) たまに、こう書くヤツが居るが殺意を覚える 一般的には可変値が左だと思う 俺も可変値が左だと思うけど、統一された指針が既にあるならそれを貫いたほうがいい 一貫性はとても大事 小さい方を左に書く。 頭の中では、大小は、左右で考えているから 横書きと同じ感覚。 左上がスタート地点 洋画ではそう。左上に赤色を配置する。 そこが目線のスタート地点。 そこから時計回りに目線が、渦の中心へと向かっていく >>626 普通、言葉で考えると「lengthは10以上100未満?」て聞くじゃん。 「10は〜100は〜?」みたいな聞き方しないよね。 主語と動詞を逆にしちゃいけないと思う。 CやC++の頃は if (length == 10) としたかったところをコーディングミスで if (length = 10) にしてバグるのを防ぐ為に逆向きにしてた人を見受けたけど、いまどきはIDEがエラー出してくれるからねえ。 >630 なるほど、確かにバグ防止で逆向きにも一理ある 面白いこと考えるね C言語では、左に代入できないものを書いていた 比較演算子と間違えて、代入演算子を使うと、コンパイルエラー ヨーダ記法が可読性低いってのは散々言われてる 結局流行ってないしやらなくていい >>630 > 言葉で考えると「lengthは10以上100未満?」て聞くじゃん なるほど、改めて思い起こすと言葉以上に図や式で考えているな そういう資料を読み書きすることが多いからかもしれないが 10 length 100 --|----^----------|-- 10 ≦ length < 100 他所のだけどイメージ https://i.imgur.com/d5iRSb2.jpg kotlin day4 kotlinc, kotlinコマンドの-classpathオプションの使い方でハマった。 >kotlin -cp jsoup-1.11.3.jar JsoupKt error: could not find or load main class JsoupKt こちらが正解 kotlin -cp .:jsoup-1.11.3.jar JsoupKt なんか、変な仕様。そろそろbuild.gradleファイルの作り方を学ぶべきか? あのぉー、Kotlinでスクレイピングしたいんですけど、 Jsoupがbest practice? https://github.com/jhy/jsoup 実は、Javaも初心者なので、Kotlinへのmigrationでヘトヘト! >>640 どんなサイトをスクレイピングしたいのかによるけど、javascriptをガンガン使ってるようなサイトならSeleniumが鉄板だと思うよ。 Jsoupでもjsを実行させられるらいしけど、とても辛いと聞いたことがある。基本的には静的なhtmlを扱うためのライブラリ。 >>641 thx Kotlin day5 コマンドラインで、jsoupでスクレーピングするソースを作成できた。 昔を思い出して、実行にはMakefile作成して行った。 Makefile内で文字列操作(大文字小文字変換とか、文字列連結)とかできるかな? Makefileはこんな感じ! CC := kotlin CFLAGS1 := -cp jsoup-1.11.3.jar -include-runtime CFLAGS2 := -cp .:jsoup-1.11.3.jar SRC := jsoup all: go go: $(CC)c $(SRC).kt $(CFLAGS1) $(CC) $(CFLAGS2) JsoupKt ~ >>642 makeが何かをわかっていたらそんな質問はしない >>641 Seleniumってテストツールだと思ってたが、そんな使い方があるのか。 目からうろこが1000枚くらい落ちた。 >>644 Selenium自体はテストとは無関係だよ、ただ用途としてテストツールと組み合わされることが多いだけ。 最近のサイトはReactとかで動的にガンガン組み立てられるからスクレイピングもSelenium使っておいた方が無難。 Ruby, Nokogiri, Selenium WebDriver を使えば? CSS Selector, XPath で、要素を指定する driver.execute_script で、JavaScript のソースコードも実行できる Kotlin勉強してるって言ってるんだから別にRubyじゃなくていいだろ NokogiriでXPathとCSSセレクタ使うならべつにこっちでも同じだと思うよ JsoupはNokogiriと違ってXPathを使ってDOMの操作ができない。 けど、使い方はNokogiriとよく似てる。 Androidアプリにスクレイピング機能を実装したいので、Ruby使えば?は却下! ところでJsoupの名前の由来って何? Java soup = Javaのスープ 変な名前。 いちいち聞かずに勉強しろと延々言われているのに守らないからそういうちぐはぐな恥を晒して支持を減らすことになる(君はすでに識別されている) どうせPythonのBeautifulSoupのことも知らないしタグスープという言葉も知らんのだろう …あ、後者は別に知らんでいいわ、知らない人が多いし正式な用語というわけでもないから >>651 まあまあまぁまァ、落ち着けよ このスレのレベルはピンキリさ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる