Javaにヒアドキュメントが来る(けど不安) 58
ストーリー by hylom
Python風だけど違う 部門より
Python風だけど違う 部門より
Anonymous Coward曰く、
Java 13では「Text Blocks」として、いわゆるヒアドキュメントのサポートが行われるという(Publickey)。
Javaでは「"」で囲まれた文字列中では改行は許されなかったため、文字列中に改行を入れたい場合は「\n」などの表現を使用する必要があった。Text Blocksでは文字列を「"""」で囲むことで、文字列中に改行を含めることが可能になる。また、インデントを認識して自動的に各行の先頭のホワイトスペースを除去することも行なってくれるようだ。
/* 例えばXMLはどうなるのかとか誤認識されないのかとかそのへんが気になる どうせなら文字列の中に変数を埋め込めるようにしてくれたほうが良かった。 */
heredoc/text blockと (スコア:1, すばらしい洞察)
string interpolationは別概念なので、その希望があってもいいが実現にはちょっと道筋が違うと思う...
M-FalconSky (暑いか寒い)
個人的にJava 13の中では (スコア:0)
Switch Expressionsがいいと思う。
条件が多くなった時は特に。
Re: (スコア:0)
そういやつい先日C#にも入ったね。
Re: (スコア:0)
条件が多くなったときはSwitch文を使ってほしい…
Re: (スコア:0)
switch式相当の事をswitch文でやろうとすると、値を返すための変数を用意してcase毎に代入する処理を書くことになるので
Re: (スコア:0)
これのためだけにJava13にしたいくらい
Re: (スコア:0)
たまーに、COBOLのevaluateみたいに値を複数指定したいときがある。
オワコン (スコア:0, 荒らし)
終わったコンピュータ言語の話はどうでもいいです。
Re:オワコン (スコア:2, おもしろおかしい)
いち早く駆け付けて「どうでもいい」
Re: (スコア:0)
これも愛の形のひとつか
Re: (スコア:0)
どうでもいいなら書き込まないだろ
Javaに親でも殺された口だな
Re:オワコン (スコア:1)
たぶん親を殺されたわけじゃなくて、
面子を潰されたのでは。
基本的には王道でシンプルな言語だけど、それでもぺちぱーには難しすぎる言語だから。
Re: (スコア:0)
Oracle被害者の可能性もあるべよ
Re: (スコア:0)
エンジニアの子供を殺された親ならそこそこいそう
まだこんな改良してるの? (スコア:0)
20年間導入しなかった機能なんだから本質的に要らないんじゃねーの?
これまで慎重に検討してきた何かがあるのかしら。
Re:まだこんな改良してるの? (スコア:1)
// そんなことより文字列リテラルが64kバイト制限なのは治ってないのかい
Re: (スコア:0)
> まだこんな
というレベルでも定期的にバージョンを上げてゆかないと死亡推定されそうですから、遠い昔の積み残しでも世の流行りとか作業の優先順位とかを見て回収するタイミングに至ったのでしょう。
Re: (スコア:0)
ほかの言語がこういうの対応してるからその真似。色んな言語に手を出してると同じような機能が欲しくなる。そしてどんどん便利になる。
#バグ修正以外のアプデも新しい言語も本質的に要らないってなるよw
Re: (スコア:0)
最初からC#のような路線を取っていれば多くの開発者やコードが救われただろうに。
Re: (スコア:0)
わからないのでもう少し詳しく頼む。
Re: (スコア:0)
C#が出てきた頃とは時代が違う。同じような発想は当時では無理
Java だって出てきた頃には斬新なものだったんだよ。
C99すら無い時代だよ。ANSI-C互換コンパイラをうたってても実際には互換性なんてなくて、コンパイラ毎に書き方変えなきゃコンパイルできないなんて当たり前の時代。
オブジェクト指向って何ぞ?っていうプログラマがかなり多かった時代だよ。
オブジェクト指向やってたって、インターフェースの継承と実装の継承を区別するなんていう発想もない人も多かった時代だよ。
全体をオブジェクト指向的に設計された大型ソフトなんて、まだ存在しなかったから、全部 virtualでも大丈夫だと疑われてなかったんだよ。
C#が出てきた時代と一緒にしちゃいけないよ。
Re: (スコア:0)
いやいやいやいや、そういう問題じゃないw
Javaが言語仕様の更新に消極的だった時代がどれだけあったと思うのよ。
C#が3でラムダや型推論を導入していた頃、Javaは改善の希望にずっと背を向けていたわけよ。
言語仕様の変更が不可能だったとか、ポリシーで変更しないのなら仕方ない。
だから今更急に文法いじりだしたのが何で?って話。
ヒアドキュメントなんて導入に何の障害もないじゃん。
Re:まだこんな改良してるの? (スコア:1)
Javaは言語仕様の更新に消極的でいいよ。
Scala, Kotlin = Fedora
Java = RHEL, CentOS
実験は他の言語でやってもらって、本当に優れた改良だけを取り込めばよい。
Re: (スコア:0)
言語の文法を継続的に改善していく物だ、という思想自体が結構新しいでしょ。
2000年頃までは10年単位で規格のErrataを修正するぐらいが普通という時代。
Re: (スコア:0)
会社が破綻したり買収されたりいろいろあったじゃん?
消極的だったわけではなく余裕がなかったのよ。
余裕が出てきたあとも目標をすべて達成するまでバージョンを上げないという無理なルールのせいで足踏みしてたけど。
Re: (スコア:0)
どの言語でも言語仕様に更新を掛ける時、優れてない改変ってあんまり無いものですよ。
消極的で良いならそれは一つの立場だと思いますが、今のJavaはそうではないんじゃないですかね。
Re: (スコア:0)
ですよね。
将来性もなければ面白みも無く、過去の遺産と「Javaしか知らない土方」で需要を水増ししてるような言語は更新なんて一切せずに消えていくのがベストですものね。
Re: (スコア:0)
本当に優れた改良すら取り込めてないんですがそれは
Re: (スコア:0)
> 将来性もなければ面白みも無く、過去の遺産と「Javaしか知らない土方」で需要を水増ししてるような言語は更新なんて一切せずに消えていくのがベストですものね。
Javaに求められてるものが「Javaしか知らない土方」が問題なく使える言語なのだから、新しい概念を取り込むのは消極的でいいんだよ。
その分野に真っ向からかぶる Go も出てきて人気なので、競合してるけど。
えっ??? (スコア:0)
> どうせなら文字列の中に変数を埋め込めるようにしてくれたほうが良かった。
えっ、これまだ出来ないの?
クソ言語なりに型安全やNull安全に着実に進化してきてPhpStormを使えばかなり安全快適に開発できるようになってきたPHPですらできるのに?
Re: (スコア:0)
テンプレート言語とは第一に考える点が違うからな。
Re: (スコア:0)
C#でもKotlinでもScalaでも出来ますけど…
Re: (スコア:0)
"hoge${x}fuga" と "hoge"+x+"fuga" がそんなに違うとは感じ無いけどな…
Re: (スコア:0)
みんなそう思ってるならクソ言語Java以外はだいたい使えるようにはなってないんですよ
Re: (スコア:0)
全く違いますよ。
Javaでいえば "hoge"+x+"fuga" ではなく Strig.format("hoge{%s}fuga",x.toString()) を$"hoge{x}fuga" って書けるわけですよ。
Javaで "hoge"+x+"fuga" なんてコード書いてるレベルの人だったら理解できないかもしれませんが、現実的なコード考えれば差があるのはわかるでしょう。
Re:えっ??? (スコア:1)
基本的にはMessageFormatを使うなあ。
Re: (スコア:0)
toString()って暗黙的に呼び出されるんだからそれでも冗長なんじゃ…
Re: (スコア:0)
…同等な結果の物をわざわざString.format を呼び出す方が妥当ってすごい思想だな。
toString() 明示するだけの事はある。
Re: (スコア:0)
まあこっちの方が一般に高速でしょうし。
どうとうではない。
Re: (スコア:0)
toStringを明示するかどうかは、書いても書かなくても同じなので、どうでもいいんですけど。
String.formatと + での連結が同じだと思ってるのは、議論の参加できるレベルじゃないな。
Re: (スコア:0)
あのな…
+ は StringBuilder("hoge").append(x).append("fuga") になる事が決まってる。
String.format はソース見てみりゃ判るがはるかに遅いぞ。
同等と言ってるのは結果。String.format に引数渡す方は NPE の可能性がある
が + は "null" になるという違いくらいしかない。
Re: (スコア:0)
nullを突っ込んでNPEにならないのって致命的なバグを生みますよ。
ユーザー名:null
みたいな間抜けな表示を生む
Re: (スコア:0)
お手軽スクリプト向けの機能でJavaみたいなのには無いイメージだったが、そうか今はC#にもあるんだな。
Re: (スコア:0)
Java単体でできなくてもJava用のテンプレートエンジンは大量にあります
Re: (スコア:0)
お前ログ出力で内容とコードをちょろっと出しておきたいみたいなシンプルな要件のときにわざわざテンプレートエンジン使うの?
Re: (スコア:0)
ぬるせーふなんて軟弱者はコトリンをあたりつかう
私は軟弱者
自動的に各行の先頭のホワイトスペースを除去 (スコア:0)
っていうけど、スペースも保存して欲しいときは?
Re:自動的に各行の先頭のホワイトスペースを除去 (スコア:1)
基本的には、整形用のスペースは取り払う仕様で、そのあとで
> String::indent can then be used to manage indentation if desired.
トノコト
Javaって (スコア:0)
まだあったんだ
みんなお世話になったはずなのに (スコア:0)
随分なものいいがおおいねー