X



Kotlin 5

■ このスレッドは過去ログ倉庫に格納されています
0578デフォルトの名無しさん
垢版 |
2019/04/23(火) 20:36:26.55ID:gv0SOq8d
やはりプログラミングも茶道とか華道とかと同様にプログラミング道を作ってわびさびが必要な時代が来たのかも知れないな。
0581デフォルトの名無しさん
垢版 |
2019/04/23(火) 20:42:02.64ID:gv0SOq8d
>>576
変数名を日本語にすれば良い。
ソース丸ごと世界に公開する予定がないならその方が分かりやすくて良い。
日本語知らないやつには難読化して軽くプロテクトが掛かった状態にもなる。
0582デフォルトの名無しさん
垢版 |
2019/04/23(火) 20:54:10.92ID:3Q52IgbA
>>581
昔、英語が出来なかった時には、
kabuPrice
とか
kabuka
なんて恥ずかしい名前使ってたけど、
今では、
sharePrice
でないと、code reading時にストレス感じるわぁ。
0583デフォルトの名無しさん
垢版 |
2019/04/23(火) 20:57:09.18ID:gv0SOq8d
漢字使え漢字
0584デフォルトの名無しさん
垢版 |
2019/04/23(火) 21:02:15.89ID:3Q52IgbA
val 感じ = "感じ"
print(感じ)
なんと、warningは出るが、実行可能。
0585デフォルトの名無しさん
垢版 |
2019/04/23(火) 21:05:59.98ID:3Q52IgbA
Qiita見ながらKotlin修行中だけど、
Jump Command便利そう。
return@forEach
continue@loop
return@loop
とか言うやつ。

これSwiftに欲しい。
0586デフォルトの名無しさん
垢版 |
2019/04/23(火) 21:15:06.63ID:3Q52IgbA
そんなことより、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

たったコレだけしか表示されないっす。
0591デフォルトの名無しさん
垢版 |
2019/04/23(火) 23:23:43.15ID:IWDMUBZh
ごめん間違えた、SwiftにあるからKotlinに欲しいって読み違えた
Xamarinのライセンス買ってくる
0593デフォルトの名無しさん
垢版 |
2019/04/24(水) 05:38:27.15ID:MHxaAVIF
goto文みたいに次にどこに行くのか読みにくいって意味じゃないかな
そんなことはないけどね
0594デフォルトの名無しさん
垢版 |
2019/04/24(水) 05:51:11.02ID:kB2a7+Os
変数名漢字って結構有りだと思う
平均からすれば英語かなり必死に勉強したほうだと思うけど、ネイティブからすれば変な英語使ってるって自覚あるし
ネイティブ的な感覚がないから、命名には常に苦労する
もちろん特定用途でしか使えない手法だけど、やっぱり母国語ってわかりやすいよね
英語圏のやつらにスーパハカーが多いのはそういう理由もあるよな、母国語でプログラムできるのうらやましいわ
0595デフォルトの名無しさん
垢版 |
2019/04/24(水) 07:33:38.62ID:ZqBzQREh
>>594
英語人口20億、英語母語5億
くらいじゃない?

チェコ、ロシア、ルクセンブルグにHacker多い印象が俺にはある。
0596デフォルトの名無しさん
垢版 |
2019/04/24(水) 11:18:15.23ID:ZqBzQREh
Constructorの書き方がムズイ。
primery, secondary constructorとか、Swiftには無いし。

Kotlinスタートブック、はしばらく様子見。今の所買わない方向で…
だって、2016年の本って、情報が古そうだし。
0597デフォルトの名無しさん
垢版 |
2019/04/24(水) 12:11:30.51ID:f6AiwYyw
そのうち在日ユダヤが「日本人にベーグル盗まれた」なんて狂言やりそう
0598デフォルトの名無しさん
垢版 |
2019/04/24(水) 12:20:40.85ID:ymPUK1bE
>>594
日本語固有のややこしい漢字の名称を無理やり英語にするよりはそのまま使った方が可読性もはるかにいいわな
何か不都合が起きたらIDEでリネームすりゃいいだけの話だから、全然ありだと思う
俺はテストケース名は日本語がんがん使う
0599デフォルトの名無しさん
垢版 |
2019/04/24(水) 12:48:24.16ID:CTi91KC0
>>596
Swiftの designated initializer ≒ Kotlinの primary constructor
Swiftの convenience initializer ≒ Kotlinの secondary constructor
0603デフォルトの名無しさん
垢版 |
2019/04/24(水) 14:14:45.53ID:ZqBzQREh
>>599
thx
0604デフォルトの名無しさん
垢版 |
2019/04/24(水) 14:19:09.62ID:ZqBzQREh
>>602
Kotlin day3の俺には、なぜAのインスタンスがnameプロパティを持つのか?
良く解らん。
Rubyみたいに、Aを再オープンしてるのか?
0605デフォルトの名無しさん
垢版 |
2019/04/24(水) 14:22:08.49ID:ZqBzQREh
>>604
fun mainの外でthisは何を指してるのだ?
0606デフォルトの名無しさん
垢版 |
2019/04/24(水) 14:28:29.52ID:ZqBzQREh
>>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) {}
}
0607デフォルトの名無しさん
垢版 |
2019/04/24(水) 14:55:22.29ID:CTi91KC0
>>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対象になって消える
0608デフォルトの名無しさん
垢版 |
2019/04/24(水) 15:34:34.20ID:ZqBzQREh
>>607
>拡張プロパティ

気になる!

Rubyの特異メソッドみたいなもんか?
特異メソッド:クラスに住んでるメソッドとは異なり、オブジェクトに住んでるソレ!
0609デフォルトの名無しさん
垢版 |
2019/04/24(水) 15:49:00.84ID:ZqBzQREh
>>608
特異メソッドとは違うみたい。

Rubyのクラスの再オープン、オープンクラス、monkey patching
とか言う邪悪なテクみたい。

Dateクラスに本来備わってないyesterday, tomorrowとかいうpropertyを追加したりできる。
0610デフォルトの名無しさん
垢版 |
2019/04/24(水) 15:52:13.17ID:ZqBzQREh
うぅーん。
top level でthisが何を指しているのか?
よく解らん。
0612デフォルトの名無しさん
垢版 |
2019/04/24(水) 15:56:37.35ID:ZqBzQREh
>>610
きっとthisは、nameプロパティーが呼ばれるまで定まらなくて、nameプロパティーのレシーバー(a1, a2)の事なんだ。

と言う事にしておこう。

拡張関数、拡張プロパティー、が必要になった時のメモ

Kotlinの拡張関数と拡張プロパティについて
https://qiita.com/RyotaMurohoshi/items/4b958af1d23da6d91a61
0614デフォルトの名無しさん
垢版 |
2019/04/24(水) 17:06:36.37ID:ymPUK1bE
散々言われてるみたいだけどまずとりあえずググる習慣をつけなさい
君はしなくていい回り道が多すぎる
0615デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:05:15.35ID:CQvKnKTI
>>602
なるほど外のmapに入れられたのか、盲点だった
それとweakhashmapなんてあったのか初めて見たわ
0616デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:26:09.12ID:ZqBzQREh
>>547
30分で…の記事、2日かけてようやくinfix記法のところまで読めた。
多分費やした時間は6hr以上。

全然30分じゃない。
0618デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:45:23.71ID:ZqBzQREh
なんと、キーワードになっている識別子もエスケープ可能!

例:isと言う名前のメソッドも呼び出せる。
foo.`is`(bar)

こんな感じ!
0619デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:49:33.98ID:ZqBzQREh
Qiitaの30分で…の記事、走り読みした。約8hr位要した。
Vim内でチョコチョコ試運転しながら、走り読み。

お疲れ様でした。▶俺
0620デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:52:35.15ID:ZqBzQREh
レシーバー付き関数リテラル、がよく解らんかった。

クラス移譲、プロパティー移譲
byとか使う奴。こんなのSwiftには無かったなぁ。
0621デフォルトの名無しさん
垢版 |
2019/04/24(水) 21:03:15.80ID:kFXKi6KY
>>596
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016

太郎本を買っていない香具師は、モグリ!
0622デフォルトの名無しさん
垢版 |
2019/04/24(水) 21:13:18.43ID:kFXKi6KY
Kotlin は、swift とは似ていない

Kotlin は、Groovy を静的にしたもの。
つまり、Ruby, JavaScript の系統

オブジェクト指向・関数型のミックス
0624デフォルトの名無しさん
垢版 |
2019/04/25(木) 06:51:51.77ID:BgXoud3L
>>621
赤ベコ本の事ね。
0626デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:34:43.93ID:ap5qFTOn
> 読みやすい
> if (length > 10 )
>
> 読みにくい
> if (10 < length)

その主観は慣れによる、俺にとっては前者の方が読みにくい

うちでは「物差しの向きに一貫性を持たせる」という指針でやっている
その上で統一のため原則として「小さい方を左に書く」
よって >, >= を使わない

if (10 <= length && length < 100)


まぁRangeやRectでメソッドでの判定をすることも多く
そういう場合は左がどうこうというのは無いが
0627デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:52:49.98ID:8pGnANx9
>>626
>if (10 <= length && length < 100)

if (length >= 10 && length < 100)
たまに、こう書くヤツが居るが殺意を覚える

一般的には可変値が左だと思う
0628デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:18:15.49ID:NAVagSqc
俺も可変値が左だと思うけど、統一された指針が既にあるならそれを貫いたほうがいい
一貫性はとても大事
0629デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:32:09.35ID:wpotMNKo
小さい方を左に書く。
頭の中では、大小は、左右で考えているから

横書きと同じ感覚。
左上がスタート地点

洋画ではそう。左上に赤色を配置する。
そこが目線のスタート地点。
そこから時計回りに目線が、渦の中心へと向かっていく
0630デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:41:16.64ID:NQvr5Lbg
>>626
普通、言葉で考えると「lengthは10以上100未満?」て聞くじゃん。
「10は〜100は〜?」みたいな聞き方しないよね。
主語と動詞を逆にしちゃいけないと思う。

CやC++の頃は
if (length == 10) としたかったところをコーディングミスで
if (length = 10) にしてバグるのを防ぐ為に逆向きにしてた人を見受けたけど、いまどきはIDEがエラー出してくれるからねえ。
0631デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:49:03.99ID:M77Bu+mz
IDEなくてもコンパイル時になんか出る。
0634デフォルトの名無しさん
垢版 |
2019/04/25(木) 13:14:11.32ID:wpotMNKo
C言語では、左に代入できないものを書いていた

比較演算子と間違えて、代入演算子を使うと、コンパイルエラー
0635デフォルトの名無しさん
垢版 |
2019/04/25(木) 13:15:44.93ID:D7t01tqT
ヨーダ記法が可読性低いってのは散々言われてる
結局流行ってないしやらなくていい
0638デフォルトの名無しさん
垢版 |
2019/04/25(木) 14:21:07.30ID:ap5qFTOn
>>630
> 言葉で考えると「lengthは10以上100未満?」て聞くじゃん

なるほど、改めて思い起こすと言葉以上に図や式で考えているな
そういう資料を読み書きすることが多いからかもしれないが

 10 length     100
--|----^----------|--

10 ≦ length < 100

他所のだけどイメージ
https://i.imgur.com/d5iRSb2.jpg
0639デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:25:32.13ID:BgXoud3L
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ファイルの作り方を学ぶべきか?
0640デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:29:50.40ID:BgXoud3L
あのぉー、Kotlinでスクレイピングしたいんですけど、
Jsoupがbest practice?
https://github.com/jhy/jsoup

実は、Javaも初心者なので、Kotlinへのmigrationでヘトヘト!
0641デフォルトの名無しさん
垢版 |
2019/04/25(木) 22:45:02.30ID:k8swiVaB
>>640
どんなサイトをスクレイピングしたいのかによるけど、javascriptをガンガン使ってるようなサイトならSeleniumが鉄板だと思うよ。
Jsoupでもjsを実行させられるらいしけど、とても辛いと聞いたことがある。基本的には静的なhtmlを扱うためのライブラリ。
0642デフォルトの名無しさん
垢版 |
2019/04/26(金) 09:47:20.98ID:MEdB7GvY
>>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
~
0644デフォルトの名無しさん
垢版 |
2019/04/26(金) 10:03:32.40ID:3DaeQ571
>>641
Seleniumってテストツールだと思ってたが、そんな使い方があるのか。
目からうろこが1000枚くらい落ちた。
0645デフォルトの名無しさん
垢版 |
2019/04/26(金) 10:43:09.29ID:v018QqLA
>>644
Selenium自体はテストとは無関係だよ、ただ用途としてテストツールと組み合わされることが多いだけ。
最近のサイトはReactとかで動的にガンガン組み立てられるからスクレイピングもSelenium使っておいた方が無難。
0646デフォルトの名無しさん
垢版 |
2019/04/26(金) 13:23:49.21ID:A/WNBxWE
Ruby, Nokogiri, Selenium WebDriver を使えば?

CSS Selector, XPath で、要素を指定する

driver.execute_script で、JavaScript のソースコードも実行できる
0649デフォルトの名無しさん
垢版 |
2019/04/26(金) 17:19:57.29ID:MEdB7GvY
JsoupはNokogiriと違ってXPathを使ってDOMの操作ができない。
けど、使い方はNokogiriとよく似てる。

Androidアプリにスクレイピング機能を実装したいので、Ruby使えば?は却下!
0650デフォルトの名無しさん
垢版 |
2019/04/26(金) 17:21:05.67ID:MEdB7GvY
ところでJsoupの名前の由来って何?
Java soup = Javaのスープ
変な名前。
0651デフォルトの名無しさん
垢版 |
2019/04/26(金) 17:57:42.91ID:TC/HkfSU
いちいち聞かずに勉強しろと延々言われているのに守らないからそういうちぐはぐな恥を晒して支持を減らすことになる(君はすでに識別されている)
どうせPythonのBeautifulSoupのことも知らないしタグスープという言葉も知らんのだろう
…あ、後者は別に知らんでいいわ、知らない人が多いし正式な用語というわけでもないから
0652デフォルトの名無しさん
垢版 |
2019/04/26(金) 18:12:21.37ID:tgodpZ2Y
ごった煮
0654デフォルトの名無しさん
垢版 |
2019/04/26(金) 20:32:30.11ID:MEdB7GvY
>>651

thx.

That is originated in “soup HTML document up beautifully”, it seems.
0656デフォルトの名無しさん
垢版 |
2019/04/27(土) 09:33:03.49ID:2kV59Ab3
スレの消費はどうでもいいんだけど、試行錯誤の記録はqiitaなりブログなり自分で管理できるところに残しておいた方が後々良いと思うんだよね
0659デフォルトの名無しさん
垢版 |
2019/05/08(水) 09:08:00.50ID:1o0ZoV2Z
>>658
わかったからFlutterで(を?)使えるようにしてくれ
現時点で構造的に対応超絶困難だ
マテリアルデザインの普及にも役立つだろ
0660デフォルトの名無しさん
垢版 |
2019/05/08(水) 19:13:02.95ID:PdqlbBMH
kotlin day17、object式
クラスAをインターフェースBによって僅かに修正したクラスCのインスタンスが必要となった時に、サブクラスCを宣言せずにそのインスタンスabを生成できる。
```kt
open class A(x: Int) {
public open val y: Int = x
}

interface B {...}

val ab: A = object : A(1), B {
override val y = 15
}
```
0661デフォルトの名無しさん
垢版 |
2019/05/08(水) 21:35:17.96ID:1/kiWGBR
前スレでも書いたがKotlin/JSに続く、Kotlin/Dartトランスパイラをだな・・
まぁやれるとしたらJB側だからリソース的に無理なんだけどな
0665デフォルトの名無しさん
垢版 |
2019/05/09(木) 07:49:34.83ID:p+Gqts9i
>>662
少なくともDart Kernel binaryを生成出来ないとFlutterのホットリロードが使えない
Kernel binaryの仕様はDart自体より安定してない

https://flutter.dev/docs/development/tools/hot-reload
https://mrale.ph/dartvm/

Flutterのクロスプラットフォーム性や開発時の機能などの結構な割合を
Dart自体の機能により実現しているのでその辺の仕組みに乗っかれないと逆に厳しいと思うぞ
0666デフォルトの名無しさん
垢版 |
2019/05/09(木) 09:45:14.22ID:Gvcl+e3N
flutterも最初素晴らしいと触ってたけど、dartの糞さに嫌気さしてさわるのやめたな。つか、flutterは致命的な問題もあるしな
0667デフォルトの名無しさん
垢版 |
2019/05/09(木) 13:10:55.61ID:fgBYrKh8
kotlinのgraphqlライブラリ微妙だからscalaのsangria使えないかなー
sangriaどころかscala触ったことないけど
0669デフォルトの名無しさん
垢版 |
2019/05/09(木) 20:53:25.89ID:Gvcl+e3N
モバイルアプリはメモリ不足によってプロセスキルされ、キル前の状態に戻すために復元の仕組みが用意されてるがflutterではどうすればいいの?問題。
例えばandroidならonSaveInstanceStateがあるが、flutterではどうすれば?
flutterは1つのActivity上でページ遷移してるが、ページ毎に状態保存、復元は?
https://github.com/flutter/flutter/issues/6827
0670デフォルトの名無しさん
垢版 |
2019/05/09(木) 20:58:48.44ID:Gvcl+e3N
モバイルアプリ開発したことあれば必ずプロセスキルの問題に出くわすと思うんだがflutterの開発チームはこれ放置してるという。普通flutterの設計段階でこの事考慮すべきだが全く考慮してなさそうというあほっぷり。
0671デフォルトの名無しさん
垢版 |
2019/05/09(木) 23:07:11.65ID:p+GF1Adw
地方都市だけど最近Android本が本屋に数冊しかない
他言語は田舎のわりにはけっこう置いてるんだけど
Kotlin移行の影響なのかも
0672デフォルトの名無しさん
垢版 |
2019/05/10(金) 00:21:35.88ID:JD2pFQw6
>>670
flutter詳しくは知らんが、もしそれが本当ならモバイル用途としてはたしかに致命的欠陥だな
後付けでflutterのフレームワークの中で強引に全部保存復帰するようにするから気にするな、みたいなこと
考えてるとしたらヤバイ
そういうことができないモバイルだからステートの保存と復帰はアプリに投げるように作ってあるのに・・
0673デフォルトの名無しさん
垢版 |
2019/05/10(金) 03:07:44.06ID:+vHN15fT
>>671
Amazon使いなさい。
0675デフォルトの名無しさん
垢版 |
2019/05/10(金) 16:19:08.62ID:54LLglmL
>>671
同志
Android関連本、俺のところも本屋には少ない。
大阪に隣接の県の県庁所在地なんだけど。

大阪のデカイ本屋へは往復2,000円掛かっちまう。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況