探検
Rubyに'end'って要らないよな
■ このスレッドは過去ログ倉庫に格納されています
2019/07/14(日) 10:11:47.62ID:aojaqLwq
インデント揃ってればそのままend無くしても読めるし誰かそういうの作ってくれよ
69デフォルトの名無しさん
2021/08/23(月) 04:45:27.20ID:gvxeAXl/ endlessメソッド定義も導入されたし、
インデントでendの代わりは本当に検討してほしいな
endはオプショナルでメソッドチェーンしたいときに使用できる感じで
実際のコードではインデントがミスマッチなことは
ミス以外ではないので、
実現は十分可能と思う
(インデント分endを補完して解釈すればいいだけなので)
とはいいつつも、endを省くだけならまだしも、
{}の閉じカッコが省かれるのは気持ち悪いかもしれないし、
エディタ上でsyntax highlight等で対応が難しい点があるかもしれない
(do endだけ省ける、とかにしたらいいかもしれない)
マジックコメントを書くことでend lessの書式にする、
ということにすると後方互換性も失われない
インデントでendの代わりは本当に検討してほしいな
endはオプショナルでメソッドチェーンしたいときに使用できる感じで
実際のコードではインデントがミスマッチなことは
ミス以外ではないので、
実現は十分可能と思う
(インデント分endを補完して解釈すればいいだけなので)
とはいいつつも、endを省くだけならまだしも、
{}の閉じカッコが省かれるのは気持ち悪いかもしれないし、
エディタ上でsyntax highlight等で対応が難しい点があるかもしれない
(do endだけ省ける、とかにしたらいいかもしれない)
マジックコメントを書くことでend lessの書式にする、
ということにすると後方互換性も失われない
2021/08/23(月) 05:37:20.38ID:qmz4xKEQ
> 実際のコードではインデントがミスマッチなことは
> ミス以外ではないので、
ある
一時的にデバッグコードを入れる時に
わざとインデントをずらしてわかりやすくする
行を移動したりする時にインデントは簡単に変更になりやすい
条件分岐を一つ追加するとその後全部インデントがずれる
インデントがブロックの終わりだとその時に自動で整形できない
人間にとって使いづらい
> ミス以外ではないので、
ある
一時的にデバッグコードを入れる時に
わざとインデントをずらしてわかりやすくする
行を移動したりする時にインデントは簡単に変更になりやすい
条件分岐を一つ追加するとその後全部インデントがずれる
インデントがブロックの終わりだとその時に自動で整形できない
人間にとって使いづらい
71デフォルトの名無しさん
2021/08/23(月) 06:49:58.36ID:gvxeAXl/ Python, Slim, Hamlなんかはインデントで閉じカッコの代わりが完全にできているので、
原理的にRubyでもできるはず
一時的にデバッグコードを入れる時 や、
行を移動したりする時 は、
編集途中なだけで最終的にはインデントも修正されるので問題ではないかと
上述の言語にも当てはまるけれど、全く問題ではないし
まあ、インデントのミスマッチは、ミス以外では、
コードの可読性を上げるために式を複数行にわけて記述する場合があるけど、
これは1つの式だと文法的に判別できるので、問題にはならない
assert_equal expected,
value
みたいな書き方
インタプリタからは1行に見えるので.
原理的にRubyでもできるはず
一時的にデバッグコードを入れる時 や、
行を移動したりする時 は、
編集途中なだけで最終的にはインデントも修正されるので問題ではないかと
上述の言語にも当てはまるけれど、全く問題ではないし
まあ、インデントのミスマッチは、ミス以外では、
コードの可読性を上げるために式を複数行にわけて記述する場合があるけど、
これは1つの式だと文法的に判別できるので、問題にはならない
assert_equal expected,
value
みたいな書き方
インタプリタからは1行に見えるので.
72デフォルトの名無しさん
2021/08/23(月) 07:02:22.79ID:gvxeAXl/ {}の閉じカッコが省略される(人間にとっての)気持ち悪さを解消するために、
:なり何なり(既存の文法と整合性がとれるもの)で{ の代用ができるとよいかもしれない
Pythonのマネだけど
これは、人間のためというよりは、エディタ(Rubyの文法を解さない)が
カッコのマッチでsyntax highlightするのを容易にするため.
まあ、エディタもマジックコメントで判別すればいいだけだけど、
コードのスニペットの場合でも困らなくなる.
(とはいえ、end less 導入以前の書式かどうかの判別は困るかもだけど.)
:なり何なり(既存の文法と整合性がとれるもの)で{ の代用ができるとよいかもしれない
Pythonのマネだけど
これは、人間のためというよりは、エディタ(Rubyの文法を解さない)が
カッコのマッチでsyntax highlightするのを容易にするため.
まあ、エディタもマジックコメントで判別すればいいだけだけど、
コードのスニペットの場合でも困らなくなる.
(とはいえ、end less 導入以前の書式かどうかの判別は困るかもだけど.)
73デフォルトの名無しさん
2021/08/23(月) 07:12:52.75ID:gvxeAXl/ まあ、最初にも書いたように、
{}の場合は省略不可で、end の場合だけ省略可
とするのがシンプルで簡単かもしれない.
(エディタでの対応カッコ検出が簡単かどうかはわからないが.)
これだけの変更なら、自分でプリプロセッサを書いて比較的簡単に実装できるかも.
ソースファイルをload/requireする箇所にフックして、
end less のコードをend 有りに変換
{}の場合は省略不可で、end の場合だけ省略可
とするのがシンプルで簡単かもしれない.
(エディタでの対応カッコ検出が簡単かどうかはわからないが.)
これだけの変更なら、自分でプリプロセッサを書いて比較的簡単に実装できるかも.
ソースファイルをload/requireする箇所にフックして、
end less のコードをend 有りに変換
2021/08/23(月) 09:34:16.96ID:Dqds6CCk
2021/08/23(月) 09:35:18.11ID:Dqds6CCk
{} でも begin end でもどちらでもいいけど
自動整形でインデントを整えることができる
インデントを下げるとか人間がやることじゃない
自動整形でインデントを整えることができる
インデントを下げるとか人間がやることじゃない
76デフォルトの名無しさん
2021/08/26(木) 19:54:53.16ID:4fOoDR4L だれも指摘していないので年寄りがひとこと言っておこう。
FORTRAN の時代は、「END.」でプログラムが終わる
(つまり、最短のプログラムは「END.」だった)という約束があり、
Java もそうだが戻り値が void でも、「return;」を書くのが
作法だった。
まぁ、「いまのところ、そうなっている」というだけで、
将来は省略できるようになるんじゃないか?
FORTRAN の時代は、「END.」でプログラムが終わる
(つまり、最短のプログラムは「END.」だった)という約束があり、
Java もそうだが戻り値が void でも、「return;」を書くのが
作法だった。
まぁ、「いまのところ、そうなっている」というだけで、
将来は省略できるようになるんじゃないか?
2021/08/27(金) 00:29:20.60ID:b4Lxoyu9
>>76
endを省略するだけの話と
endを省略する代わりにインデントを使う
のとでは意味が違う
結局はインデントを使わなければいけないだけ
{} や begin end 方式だとインデントを入力しなくていい
エディタが勝手にやってくれるし整形もしてくれる
インデントに二つの意味、見やすくするのとブロックの終了をもたせると
自動整形ツールが信用できなくなる
endを省略するだけの話と
endを省略する代わりにインデントを使う
のとでは意味が違う
結局はインデントを使わなければいけないだけ
{} や begin end 方式だとインデントを入力しなくていい
エディタが勝手にやってくれるし整形もしてくれる
インデントに二つの意味、見やすくするのとブロックの終了をもたせると
自動整形ツールが信用できなくなる
78デフォルトの名無しさん
2021/08/27(金) 02:49:34.51ID:NGc2JSym Rubyのコードを書いていて、ときどき indent mismatch のエラーになる
そういうときはどこでmismatchが発生しているのか探すのが大変
(一番最後のendでmismatchが検出されるけど、
それ以前のどこかにあることしかわからないから、
コードをすべて読み直すことになる.)
結局、インデントに意味を持たせなくても(現状でも)、
インデントが狂うと(そしてdo end がmismatchになると) syntax errorになるし、
インデントは正しく保つ必要がある.
(ので、人間の手間としては同じだし、
むしろmismatchをしっかり検出して将来のエラーを減らせるので、人間の手間は減る.)
(現状、indent の mismatch の場合は warning が出る. do end の数が mismatch だと当然ながら error.)
まあ、ただ、機能をあとからあれもこれも追加すると
手に負えなくなって言語が死んでしまう原因となる可能性はある.
endless method定義でさえ、少し中途半端には感じるし、
=で終わるmethodには使えないというのも一貫性に欠ける.
(後方互換性がなくなること、より正確には、syntaxが変わることは
スニペットをsyntax highlightしたいときに困りそう. ウェブサイト等で.)
end が省略できるメリットというのは実際、ごく小さいので、
それに比べるとリスクが大きいよなあ、と思う
あと、RubyはPythonよりも純粋なオブジェクト指向言語で、
method chainを多用するので、
end 省略のメリットはさらに小さい.
大きすぎるリスクを考えると、Rubyはこのままで、
将来、別の言語を作るときに採用、というのが妥当かな.
それに、根本問題として、本当に閉じカッコなしの方がよいのか、というところは
もう少し考えたい. Pythonを数年間使ってみてから結論を出そうと思う.
そういうときはどこでmismatchが発生しているのか探すのが大変
(一番最後のendでmismatchが検出されるけど、
それ以前のどこかにあることしかわからないから、
コードをすべて読み直すことになる.)
結局、インデントに意味を持たせなくても(現状でも)、
インデントが狂うと(そしてdo end がmismatchになると) syntax errorになるし、
インデントは正しく保つ必要がある.
(ので、人間の手間としては同じだし、
むしろmismatchをしっかり検出して将来のエラーを減らせるので、人間の手間は減る.)
(現状、indent の mismatch の場合は warning が出る. do end の数が mismatch だと当然ながら error.)
まあ、ただ、機能をあとからあれもこれも追加すると
手に負えなくなって言語が死んでしまう原因となる可能性はある.
endless method定義でさえ、少し中途半端には感じるし、
=で終わるmethodには使えないというのも一貫性に欠ける.
(後方互換性がなくなること、より正確には、syntaxが変わることは
スニペットをsyntax highlightしたいときに困りそう. ウェブサイト等で.)
end が省略できるメリットというのは実際、ごく小さいので、
それに比べるとリスクが大きいよなあ、と思う
あと、RubyはPythonよりも純粋なオブジェクト指向言語で、
method chainを多用するので、
end 省略のメリットはさらに小さい.
大きすぎるリスクを考えると、Rubyはこのままで、
将来、別の言語を作るときに採用、というのが妥当かな.
それに、根本問題として、本当に閉じカッコなしの方がよいのか、というところは
もう少し考えたい. Pythonを数年間使ってみてから結論を出そうと思う.
2021/08/27(金) 04:16:45.56ID:aA7lb4P9
2021/08/27(金) 09:39:59.97ID:NGc2JSym
2021/08/27(金) 10:13:56.72ID:NGc2JSym
Python と Ruby どちらが好きか、という質問への答え
一番上の回答に完全同意
Quoraについての質問: RubyとPythonではどちらが好きですか?
https://jp.quora.com/Ruby-to-Python-deha-dochira-ga-suki-desu-ka
パイソンの方がルビーよりライブラリが充実しているが
それを除くと言語としてパイソンの方がうらやましいところはインデントだけ
(他の人が書いている型チェックは場合によりほしいというのは同意.
最近ルビーでもできるようになったようだが.)
まあしかしよく考えたら、インデント方式にするには行末にコロンなどつける必要があるかもしれず(あるいはないかもしれないが)、
行末のコロンはちょっと美しくない
(昔はdo end なんじゃこれと思ったものだが、完全にルビー脳になったなあ)
まつもとゆきひろさんが書いているように、
https://jp.quora.com/Ruby-ni-deki-te-Python-ni-deki-nai-koto-ha-nani-desu-ka?top_ans=142958781
ルビーでは(ほぼ?)すべてオブジェクトだし、式と文の区別もない
何でも繋げられる
その思想からすると区切る意味を持つコロンは、一貫性がなくなって美しくない
(ruby では } や end の後にも chain できる. :の後はできなくなりそう.)
コロンなしでエンドレスが導入できるなら興味はあるが.
好みの問題ということになるのだろうけど、
Rubyは本当に素晴らしい言語
この言語がなければ私は今ほど幸せではなかっただろう
そしてこの素晴らしい仕様の言語をよくここまで作ってこられたなと思う
携わってこられた方々に感謝. これからも使いやすい言語でありますように.
一番上の回答に完全同意
Quoraについての質問: RubyとPythonではどちらが好きですか?
https://jp.quora.com/Ruby-to-Python-deha-dochira-ga-suki-desu-ka
パイソンの方がルビーよりライブラリが充実しているが
それを除くと言語としてパイソンの方がうらやましいところはインデントだけ
(他の人が書いている型チェックは場合によりほしいというのは同意.
最近ルビーでもできるようになったようだが.)
まあしかしよく考えたら、インデント方式にするには行末にコロンなどつける必要があるかもしれず(あるいはないかもしれないが)、
行末のコロンはちょっと美しくない
(昔はdo end なんじゃこれと思ったものだが、完全にルビー脳になったなあ)
まつもとゆきひろさんが書いているように、
https://jp.quora.com/Ruby-ni-deki-te-Python-ni-deki-nai-koto-ha-nani-desu-ka?top_ans=142958781
ルビーでは(ほぼ?)すべてオブジェクトだし、式と文の区別もない
何でも繋げられる
その思想からすると区切る意味を持つコロンは、一貫性がなくなって美しくない
(ruby では } や end の後にも chain できる. :の後はできなくなりそう.)
コロンなしでエンドレスが導入できるなら興味はあるが.
好みの問題ということになるのだろうけど、
Rubyは本当に素晴らしい言語
この言語がなければ私は今ほど幸せではなかっただろう
そしてこの素晴らしい仕様の言語をよくここまで作ってこられたなと思う
携わってこられた方々に感謝. これからも使いやすい言語でありますように.
2021/08/27(金) 13:12:03.95ID:lxI1gnNr
その昔のlispにはスーパーカッコというのがあって
閉じカッコとして ] を使うとすべてのカッコを閉じて
プログラムの終了を意味するというのがあった
エディタがカッコの対応を示してくれるので
結局、流行らずに忘れ去られてしまった。
閉じカッコとして ] を使うとすべてのカッコを閉じて
プログラムの終了を意味するというのがあった
エディタがカッコの対応を示してくれるので
結局、流行らずに忘れ去られてしまった。
83デフォルトの名無しさん
2021/08/27(金) 14:22:53.16ID:8dQk5Ix1 >>81
>RubyはPerlの文脈を背負っているので、TMTOWTDIといって「同じことをやるのにも複数のやり方がある」という自由主義的なのに対し、
>PythonのほうはZen of Pythonに宣言されているように、反TMTOWTDI主義とでもいうべき
> “There should be one—and preferably only one—obvious way to do it.”
> (同じことをやる唯一の書き方があるべきだ)という教条主義的な思想があります。
こんなこと書いてる時点でこいつPython触ってないだろってのが判る
ただのしったか野郎
別にrubyを否定はしないがデタラメ書くなよとは思う
>RubyはPerlの文脈を背負っているので、TMTOWTDIといって「同じことをやるのにも複数のやり方がある」という自由主義的なのに対し、
>PythonのほうはZen of Pythonに宣言されているように、反TMTOWTDI主義とでもいうべき
> “There should be one—and preferably only one—obvious way to do it.”
> (同じことをやる唯一の書き方があるべきだ)という教条主義的な思想があります。
こんなこと書いてる時点でこいつPython触ってないだろってのが判る
ただのしったか野郎
別にrubyを否定はしないがデタラメ書くなよとは思う
2021/08/27(金) 18:54:27.55ID:aA7lb4P9
だろうなw
Pythonのインデントが羨ましとか言ってるのは使ったことがないか
Pythonしかしらないやつだけ
デバッグのためのインデントをわざとずらすとか
コードブロックをインデントが異なる場所に移動するとか
条件を追加するとか、やったことがないから
インデントの方がいいとか思うんだよ
あれだろ?インデントって意識せずに普通にやることだけど
初心者はインデントする理由すらわからない、そのレベルの人がうじゃうじゃいる場所で
「インデントを強制される」からマシなコードになる(えぇ?その程度で!?)
みたいな話だろ
Pythonのインデントが羨ましとか言ってるのは使ったことがないか
Pythonしかしらないやつだけ
デバッグのためのインデントをわざとずらすとか
コードブロックをインデントが異なる場所に移動するとか
条件を追加するとか、やったことがないから
インデントの方がいいとか思うんだよ
あれだろ?インデントって意識せずに普通にやることだけど
初心者はインデントする理由すらわからない、そのレベルの人がうじゃうじゃいる場所で
「インデントを強制される」からマシなコードになる(えぇ?その程度で!?)
みたいな話だろ
85デフォルトの名無しさん
2021/08/28(土) 05:55:06.93ID:Uz5at9mY >>83
それはPython作成のmajorなcontributor自身が言っていることかと
Python aims to be simple and consistent in the design of its syntax, encapsulated in the mantra "There should be one? and preferably only one ?obvious way to do it", from the Zen of Python.[2]
This mantra is deliberately opposed to the Perl and Ruby mantra, "there's more than one way to do it".
https://en.wikipedia.org/wiki/Python_syntax_and_semantics
>>82
一度だけ使える奥義みたいな感じだね
インデント方式か、括弧方式かについて考えているけれど、
閉じ括弧なし強制、閉じ括弧あり強制、閉じ括弧はoptional の3つで考えた場合、
閉じ括弧はoptionalというのは一見良さそうに思えて、実はバグの温床になりやすいものかもしれない
そのあたりは(紙に書いて)もう少し考えてみないとわからない
もし 閉じ括弧はoptional がよくないアイデアの場合は、
閉じ括弧なし強制 or 閉じ括弧あり強制 の二択になるけど、その場合は後者の方が明確に良い
Method chainが使えるから.
Endless method定義の導入が検討されていたときに、
do end の end を省略可にするアイデアはあるかと聞かれて、ないとMatzが即答していた.
私自身でもう少し検証してみるつもりだけど、Matzは当然end 省略についてよく考えた上で言っているのだろうし、
Matzが言うのならやはり現状がベストなのかもしれない.
それはPython作成のmajorなcontributor自身が言っていることかと
Python aims to be simple and consistent in the design of its syntax, encapsulated in the mantra "There should be one? and preferably only one ?obvious way to do it", from the Zen of Python.[2]
This mantra is deliberately opposed to the Perl and Ruby mantra, "there's more than one way to do it".
https://en.wikipedia.org/wiki/Python_syntax_and_semantics
>>82
一度だけ使える奥義みたいな感じだね
インデント方式か、括弧方式かについて考えているけれど、
閉じ括弧なし強制、閉じ括弧あり強制、閉じ括弧はoptional の3つで考えた場合、
閉じ括弧はoptionalというのは一見良さそうに思えて、実はバグの温床になりやすいものかもしれない
そのあたりは(紙に書いて)もう少し考えてみないとわからない
もし 閉じ括弧はoptional がよくないアイデアの場合は、
閉じ括弧なし強制 or 閉じ括弧あり強制 の二択になるけど、その場合は後者の方が明確に良い
Method chainが使えるから.
Endless method定義の導入が検討されていたときに、
do end の end を省略可にするアイデアはあるかと聞かれて、ないとMatzが即答していた.
私自身でもう少し検証してみるつもりだけど、Matzは当然end 省略についてよく考えた上で言っているのだろうし、
Matzが言うのならやはり現状がベストなのかもしれない.
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 秋田県警本部機動隊の敷地にクマ [nita★]
- 【悲報】中国の輸入で生活してるジャップがその中国に戦争吹っ掛ける理由、誰にもわからない😰 [616817505]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- ジャップ、今更気付く。スーパー店員「レジに椅子導入したら楽になりました」 [242521385]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 【悲報】高市経済ブレーン「積極財政は円高要因ですよ」 [237216734]
