Pythonに見られるインデントによる制御構造の是非at TECH
Pythonに見られるインデントによる制御構造の是非 - 暇つぶし2ch1:デフォルトの名無しさん
07/01/22 22:44:02
議論よろしく。

2:デフォルトの名無しさん
07/01/22 22:46:31
過疎スレだ?ボコボコにしてやんよ
 ∧_∧
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) ババババ
 ( / ̄∪


3:デフォルトの名無しさん
07/01/23 00:47:09


4:デフォルトの名無しさん
07/01/23 02:09:24
Haskell は 2 次元文法と括弧付きの文法を簡単に切り替えられるらしいね。

5:デフォルトの名無しさん
07/01/23 02:09:44


6:デフォルトの名無しさん
07/01/23 07:01:34


7:デフォルトの名無しさん
07/01/23 18:03:50


8:デフォルトの名無しさん
07/01/23 20:52:04
>>4
切り替えるというか混在OKでしょ

他の言語もブレースとインデント両方サポートしてほしい。
ブレースだから、インデントだから、endがうざいから
とかが言語選択の理由になってしまうのはつまらんと思う。

9:デフォルトの名無しさん
07/01/23 20:59:39
これって単に好みの問題?

10:デフォルトの名無しさん
07/01/23 23:27:21
ぶらさがり問題が起きないって言う利点が大きい。
どっちみちインデントが揃ってないプログラムは読みにくいし。
エディタが完璧に整形してくれるのが一番なんだけど。

>他の言語もブレースとインデント両方サポート
機械的に選択可能ならエディタにでも組み込めばいいじゃないかな。

11:デフォルトの名無しさん
07/01/24 04:32:33
python はこれだから気に入ったけど
メソッド第一引数 self で(ノ∀`)アチャーだったので
GroovyかPnutsに渋々移行した。

12:デフォルトの名無しさん
07/01/24 04:45:25
>>10
言語作者がめんどくさがることは各ユーザーがやればいいというわけですね。なるほど。

13:デフォルトの名無しさん
07/01/24 04:49:26
>>11
あそこはself以外の単語入れてボケるのが面白いのに

14:デフォルトの名無しさん
07/01/24 17:57:01
>>1
インデントは「制御構造」とは言わないのでは。
制御構造と言ったら普通は順構造(並んでいる順に実行)、分岐構造、反復構造のことを指す。

Python のインデントは「ブロック」を定義するための仕組みだ。

15:デフォルトの名無しさん
07/01/27 21:58:16
好きだが、diffフレンドリーでないのが困る。

ブロックをtry-exceptで囲って、さらにブロックの中のバグを取ったりする。
その差分を後で別のブランチにマージするときに、本当に大丈夫かどうか
不安になる。

>11

僕はあそこにselfを入れてくるのがわかりやすくて好きだなぁ。
まぁ、好みの問題だけど。javaのインスタンス変数への暗黙アクセスは
元々嫌いで、毎回thisって打ってたタイプなので尚更。


16:デフォルトの名無しさん
07/01/27 22:29:49
あれは言語側でメンバ変数と仮引数の名前が同一なら
this. 打つように強制して欲しかったと思う。
もしくはコンパイル時に警告を出すとか。デフォで。

17:デフォルトの名無しさん
07/02/01 08:05:12
>>15>>16
java知らないけど、その状況って解釈不能じゃね?w

18:デフォルトの名無しさん
07/02/25 23:16:18
URLリンク(en.wikipedia.org)

思ったより数少ないね。

19:デフォルトの名無しさん
07/02/26 04:59:32
pythonもどきのBoo言語てのもある

20:デフォルトの名無しさん
07/03/01 17:11:56
俺自分でインデントするのめんどくさくてテキトーに書き散らして
:%!perltidy する人なので、pythonは使えないと思った。


21:デフォルトの名無しさん
07/03/04 21:34:51
悔い改めよ

22:デフォルトの名無しさん
07/03/04 22:09:27
アーメン

23:デフォルトの名無しさん
07/03/04 22:16:35
GNUのキモイインデントが見られないというデメリットがあります

24:デフォルトの名無しさん
07/03/05 01:09:34
ンギモヂイイ!に見えた

25:デフォルトの名無しさん
07/03/05 14:25:34
何のエロマンガだよ。

26:デフォルトの名無しさん
07/03/05 15:56:37
東北人?

27:デフォルトの名無しさん
07/03/11 06:02:44
これって普通のコンパイラコンパイラツールで出来るの?

28:デフォルトの名無しさん
07/03/12 14:39:52
これってどれ?

29:デフォルトの名無しさん
07/03/13 11:10:02
Pythonに見られるインデントによる制御構造

30:デフォルトの名無しさん
07/03/13 14:57:54
LL(1)

31:デフォルトの名無しさん
07/03/13 23:15:23
是。

32:デフォルトの名無しさん
07/07/18 06:38:05
パッと見たときにブレースの方が視認性よくね?
この良さわからんわ

33:デフォルトの名無しさん
07/07/18 07:45:36
二次元映像の認識能力は人によってばらつきがあるからな。
俺はブレースを書かなくてもブロックを表現出来るのであれば積極的に省略したい。

34:デフォルトの名無しさん
07/07/18 08:26:12
>>32
慣れの問題かもしれん

35:デフォルトの名無しさん
07/07/18 08:40:10


36:デフォルトの名無しさん
07/07/18 09:31:08


37:デフォルトの名無しさん
07/07/19 08:09:51
俺は是
エディタがインデントレベルに応じて色分けとか
サポートがあるとさらに良い。

38:デフォルトの名無しさん
07/07/19 15:08:12
>>32
> パッと見たときにブレースの方が視認性よくね?
> この良さわからんわ

箇条書きした文章だと思うんだ!!

39:デフォルトの名無しさん
07/07/19 15:27:08
> ブレースの方が視認性よくね

ブレースを使った言語で、みんな視認性を良く書いてくれてるならね

40:デフォルトの名無しさん
07/07/19 18:12:01
方向音痴に地図を描かせてはいけないのと同じだ

41:デフォルトの名無しさん
07/07/19 20:55:08
Pythonは編集中にインデントレベルを変えると、周辺のレベルが思い出せなくて困ることがある。
C言語ライクな言語だとEmacsで M-x indent-region 一発で済むだけにPythonは書きづらい言語だ。(ただし読む分にはおk

42:デフォルトの名無しさん
07/07/19 22:15:05
矩形選択して一気にインデントレベルを変更するんじゃダメなの?

43:デフォルトの名無しさん
07/07/19 22:37:26
エディタの高水準なサポートを前提にした仕様だよね。

44:デフォルトの名無しさん
07/07/19 23:57:35
>>42
Emacs使った事無いのか?

45:デフォルトの名無しさん
07/07/20 06:02:52
俺は Vim 使ってるから Emacs は使わないけど、何で?

46:デフォルトの名無しさん
07/07/20 06:21:04
ちなみに Vim の矩形選択は Ctrl-V で出来る。Emacs でどうやるかは知らないけど、
今時のエディタなら当然可能だろう。俺がインデントを削る時はまず手で打って、j. で
行数分繰り返すけどね。

47:デフォルトの名無しさん
07/07/20 06:57:29
"<"涙目。

48:デフォルトの名無しさん
07/07/20 07:00:38
皮肉が通じんのか…

49:デフォルトの名無しさん
07/07/20 13:59:36
なぜ矩形選択なのかと

50:デフォルトの名無しさん
07/07/20 14:22:18
>>41
python-modeってそんなに不便なの?!

51:デフォルトの名無しさん
07/07/20 21:34:31
>43
一応エディタ無しでも組めないことはないだろ
エディタ前提のLisp系に比べればまだマシな方じゃね?

52:デフォルトの名無しさん
07/07/20 22:15:52
Lisp は紙と鉛筆がデフォルトだよ

53:デフォルトの名無しさん
07/07/20 22:27:49
ブロックの頭にカーソルを置いてC-M-qじゃダメなの?

54:デフォルトの名無しさん
07/07/20 22:34:53
Pythonだと制御構造を変えるとそれに合わせてインデントも修正しなくちゃならん。
問題はその時にどこからどこまでどの程度インデントをずらすのか、修正してる途中で忘れちまうことがあるんだな。

C言語系だとブレースをいじるだけで済む。インデントはエディタが自動で揃えてくれるが、それは必須でもない。

55:デフォルトの名無しさん
07/07/20 22:47:47
アホ過ぎる……

56:デフォルトの名無しさん
07/07/20 22:49:31
話題がループし始めたな

57:デフォルトの名無しさん
07/07/20 23:13:11
>>54
Python 付属の IDLE なら C-] と C-[
Emacs の python-mode なら C-c > と C-c <
でブロック全体をインデント/デインデントできるんだが、
そういうエディタの支援を利用しないと云々という話?

58:デフォルトの名無しさん
07/07/21 00:59:27
>57
そういう話なんじゃね?
>51 も >53 ができるエディタが必要って話だろ。

メモ帳で組めなきゃダメなのかよ。

59:58
07/07/21 01:03:55
って…C-M-qは字下げだったかorz
普段Emacs使わないから覚えてないな…

60:デフォルトの名無しさん
07/07/21 02:36:52
>>57
制御構造を変えるということはブロックの範囲や位置を変えたりとか色々なわけで、
それはエディタの機能じゃなくて人間の脳味噌でする仕事。
Pythonだとそういうエディタの機能ではカバーできない部分が煩わしいなぁ、と。

61:デフォルトの名無しさん
07/07/21 05:25:39
>>60
具体例きぼんぬ

62:デフォルトの名無しさん
07/07/21 07:33:20
みんな普段どんだけ低機能なエディタ使ってるんだよ。

63:自分が勘違いしていることに気づいてなさそうだな…
07/07/21 09:48:42
プログラマがアルゴリズムを考えずに
エディタにアルゴリズムを決めて貰うスレはこちらですか?

64:デフォルトの名無しさん
07/07/21 18:17:49
Python知らないが、こういうことだろ?

仮に
if (foo) {
proc1;
proc2;
}
と言うロジックがあったときに、proc2を条件から外したいとする。
その場合、当然proc2の行を次の行を入れ替えて
if (foo) {
proc1;
}
proc2;
とすればいい。しかし、インデント依存言語だとproc2のインデントを変えるだけで済んでしまう。
このように一個の条件式だけなら未だいいが、ループ内の条件式をループ外に出すといった場合には
インデントレベルの把握と操作が煩わしい。

65:なんでこんな奴が来てるんだ?
07/07/21 21:59:01
>インデントレベルの把握と操作が煩わしい。

脳内妄想は日記内でおながいしまつ

66:デフォルトの名無しさん
07/07/21 22:22:21
>>64
「ループ内の""文""をループ外に出すといった場合には」
が 
カット->ペースト->手作業でインデント揃え
カット->ペースト->コマンド一発で勝手にインデントが揃う
の差って言いたいんじゃないか?

67:デフォルトの名無しさん
07/07/22 00:16:41
>>64
{ } を使う言語もどうせ可読性のためにインデントしてるんだから
Pythonの方が表記や操作の無駄がなくてよい

68:デフォルトの名無しさん
07/07/22 03:52:21
>>64なんてproc2のインデントレベルがそのままだったら露骨に糞コードだろ。

69:デフォルトの名無しさん
07/07/22 09:39:23
>手作業でインデント揃え

はエディタの支援で "一発でインデントを揃える" ことが出来るのに

>コマンド一発で勝手にインデントが揃う

と何が違うのか意味が分からない

70:デフォルトの名無しさん
07/07/22 09:43:52
Phython厨が意図的に理解できない振りをしているのか、それとも本当に理解できないのか、どっちなんだろ。

71:デフォルトの名無しさん
07/07/22 11:00:29
>>69
「コマンド一発で勝手にインデントが揃う」


{
{
{
なんとか
}
}
}

をコマンド一発で

{
 {
  {
   なんとか
  }
 }
}

にしてくれる事

72:デフォルトの名無しさん
07/07/23 11:45:34
>70
いい加減飽きたからこの辺で放置しとくけど...

カッコをどこにいれるかと考えている段階&作業に相当するのが
「どのブロックをインデントさせようか」と考えてインデントする作業
なので >71 の「コマンド一発で勝手にインデントが揃う」は
そもそも比較対象が存在しないと言うか
そういう考え方が無意味なんですけどね…

python 使ったことないひとには理解できないかもしれません

73:デフォルトの名無しさん
07/07/23 12:28:23
リファクタリングしたことないひとには理解できないかもしれません

74:デフォルトの名無しさん
07/07/23 14:14:53
>>71
例えば Emacs の場合、「コマンド一発」って具体的にどうすんの?

75:デフォルトの名無しさん
07/07/23 14:50:48
>>74
>>53


76:デフォルトの名無しさん
07/07/23 16:42:15
C なら indent-region の類いだし
python-mode なら↓とかで。
C-c > py-shift-region-right
C-c < py-shift-region-left
C-c C-r py-shift-region-right
C-c C-l py-shift-region-left

インデントの意味もこまんど一発の意味合いも違うけど

77:デフォルトの名無しさん
07/07/23 22:08:38
1:1 でマップ出来ないというのはその通りだよね。
この場合は、一部を切り出して比較しても意味が無い。

78:デフォルトの名無しさん
07/09/13 00:17:09
>>74
ブロックの終端に必ずreturnかpassを付けてから整形する

79:デフォルトの名無しさん
07/09/13 00:23:14
おお、気づかなかったよ

80:デフォルトの名無しさん
07/09/13 00:45:46
>>78
それは・・・・・・

81:デフォルトの名無しさん
07/09/13 01:03:47
それじゃあ、rubyのendのほうがマシw

82:デフォルトの名無しさん
07/10/11 11:14:00
キモイ

83:デフォルトの名無しさん
07/10/11 11:39:30
FORTRAN 最強!

1~5桁目
  行番号を書く。1カラム目にCを書くとその行はコメント行になる。
6桁目
  継続行であるときはここに任意の文字(空白又は0以外)を書く
7~72桁目
  本文を書く
73~80桁目
  シーケンシャル番号を書く(行を識別するための番号、本文には影響しない)

123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
+---+-+----------------------------------------------------------------+-------+
行番号 コード
     DO 10 I = 1, 100
     WRITE(6,200) I
  200 FORMAT(1H ,I3)
   10 CONTINUE
     END

84:デフォルトの名無しさん
07/10/17 23:24:36
HASKELL !!!!!!

85:デフォルトの名無しさん
07/10/26 09:46:27
関数の最後にはreturn を書くクセをつければ

def A():
 ....
 return

の行頭空白がなくなったとしてもどうにか復元できるけど
たとえば

for i in range(10):
 if data[i]==3:
  break
else:
 print "NOT FOUND"

で空白がなくなったらもう復元できないよね
それが怖い
for の最後には必ず continue をつけるとか。


86:デフォルトの名無しさん
07/10/26 20:35:40
>>85
何をお仰りたいかわかりませんが
つ{}
もしくは
つ他言語

87:デフォルトの名無しさん
07/10/27 17:22:48
行頭の空白が無くなったのを復元しなくてはいけない
というシチュエーションは殆ど無いから無問題かと...

2ch に慌てて貼付けた時くらい?

88:デフォルトの名無しさん
07/10/27 22:21:36
その行頭の空白も、専ブラによっては見れるからなぁ…

89:デフォルトの名無しさん
07/11/12 07:56:43
最悪ソース見ればちゃんと残ってる

90:デフォルトの名無しさん
07/11/12 20:13:43
wxGladeが吐いたコードみてみたら

if hoge :
  hage
  fuga
  hige
  # end if

みたいになってた



91:デフォルトの名無しさん
07/11/12 20:15:10
>>83
パンチカードの時代に作られた言語だから


92:デフォルトの名無しさん
07/11/12 20:20:17
>>85
for i in range(10):
 if data[i]==3:
  break
  # end if
else:
 print "NOT FOUND"
# end for

なんかださいけど


93:デフォルトの名無しさん
07/11/13 00:58:11
そんなもんいちいちつけてコードを醜くするなら別の言語を使え、
とか言い放つPython原理主義者などはいないものか。

94:デフォルトの名無しさん
07/11/13 02:19:32
>93

endとか書くぐらいならRubyでもやってろと思う

95:デフォルトの名無しさん
07/11/13 08:41:21
Pythonって実は
for i in range(10): {
if data[i]==3:
break
}else: {
print "NOT FOUND"
}
って書いても動く?


96:デフォルトの名無しさん
07/11/13 09:12:22
残念なことに構文エラーだ

97:デフォルトの名無しさん
07/11/17 00:24:01
>>85
>>78

for i in range(10):
 if data[i]==3:
  break
pass
else:
 print "NOT FOUND"
pass

98:デフォルトの名無しさん
07/11/18 00:11:00
インデントが文法的に意味を持たなくたって、
どうせ、一秒でも保守する気のあるコードは必ずインデントして書くわけだから、
どうせだったら、インデントを文法に利用して、不要なブレースだの、endだの
を省けたほうが、合理的だし、無駄がなくて美しい。

99:デフォルトの名無しさん
07/11/18 00:18:51
不要なselfもなくしてください

100:デフォルトの名無しさん
07/11/18 01:11:44
変な記号をつけるよりselfの方がまし
selfは不要じゃないよ

101:デフォルトの名無しさん
07/11/18 02:11:57
つうか、その話とインデントはまったく独立なわけで・・・

102:デフォルトの名無しさん
07/11/18 02:21:08
インデントあれば「:」も不要だと思うけど
あれは何でのこっているんだろう?

103:デフォルトの名無しさん
07/11/18 03:19:07
>>100
スコープで文脈ってものを既に導入しているのだから、
selfくらいは省略したときに文脈から判断したっていいんじゃね?

104:デフォルトの名無しさん
07/11/18 09:49:06
>>103
インタプリタの判断ミスによる副作用を防ぐために、ピリオドを含めてたった 5 文字の self くらい明示的に指定しても良いんじゃね?


105:デフォルトの名無しさん
07/11/18 10:11:23
コードを書き捨てるだけなら面倒だと思うかもしれないが、
selfが常にあるほうがずっと読みやすいコードになるよ。


106:デフォルトの名無しさん
07/11/18 10:14:23
メンバ関数定義の最初の仮引数として常にselfを自分で書かなければならない
ことだけは、冗長だと感じる

107:デフォルトの名無しさん
07/11/18 10:28:53
>>102
コロンは,英語の表記習慣から来てるんだと思う。
PEP8のImportsセクションあたり見てみ。項目を列記する前の行にコロンを使う。

URLリンク(www.python.org)

たとえばこんなの。

Imports should be grouped in the following order:

1. standard library imports
2. related third party imports
3. local application/library specific imports

108:デフォルトの名無しさん
07/11/18 12:30:54
インタプリタの判断ミス(笑)

ミスするのは人間だろう。ミスを防ぐためにselfが
必用だというならインデントをミスった場合の
防波堤としてブレースだって必用だ。

109:デフォルトの名無しさん
07/11/18 13:33:41
ブレースミスったときの対策も必要だ!

110:デフォルトの名無しさん
07/11/18 15:03:16
括弧の閉じ忘れ対策も必要じゃね?

111:デフォルトの名無しさん
07/11/18 15:59:30
コロンに関して言えば
あると見やすいだろってだけの話で深い理由はない。


112:デフォルトの名無しさん
07/11/18 16:04:53
コロン無いと一行に書けないじゃん
if pred: body
みたいにさ

113:デフォルトの名無しさん
07/11/18 16:25:05
誰が書いても同じ書き方になるのが売りのひとつじゃなかったの?

114:デフォルトの名無しさん
07/11/18 17:03:56
>>113
んなもん、本当に同じになるわけねーじゃんよ


115:デフォルトの名無しさん
07/11/18 17:29:58
>>112
行末の「;」が省略可能なんだから
同様に1行に書く時だけ「:」つけるんで
いいんでないか?

116:デフォルトの名無しさん
07/11/18 17:31:18
self じゃなくて s で済ませば3文字減るな

117:デフォルトの名無しさん
07/11/18 17:40:57
ifとかforやめて全部 ? にすればすごく減るよね。違いは文脈で判断。

118:デフォルトの名無しさん
07/11/18 18:03:47
一番重要なのは可読性であって、打鍵数を減らすことじゃないと思うんだが、と言ってみるテスト。


119:デフォルトの名無しさん
07/11/18 18:23:18
キーワードの短さだけを考えるんじゃねえよ。
可読性もいっしょに考えるんだ。

120:デフォルトの名無しさん
07/11/18 18:28:15
self、selfってうるさいのも可読性を落とすよ

121:デフォルトの名無しさん
07/11/18 18:29:09
>>114
だからってわざわざ複数の書き方を許すような文法にしなくてもいいじゃん

122:デフォルトの名無しさん
07/11/18 18:40:08
self、self ってあって下がるのは読み手のモチベーション。可読性の低下に関しては間接的な影響しか与えないんじゃないかな?


123:デフォルトの名無しさん
07/11/18 18:44:58
わざわざself省略とかなんでそんな無駄なことしなきゃいけないんだ

124:デフォルトの名無しさん
07/11/18 18:57:28
まあぶっちゃけselfには利点の方が多いのだが。
selfをいやがる奴に限って「めんどい」とかそういう低レベルなことしか言わないな。
そういうアホはPythonを使わなくて結構。

125:デフォルトの名無しさん
07/11/18 19:04:50
>>124
禿同。そういうヤツらって実は Python どころか、きちんと機能するコードを書けるかすら疑問。


126:デフォルトの名無しさん
07/11/18 19:18:53
ぶっちゃけとかいうくせに全然ぶっちゃけた話ししてないじゃん。
さっさと利点の方が多いというところをぶっちゃけてみろよ。
単に論破されるのが怖くて隠し玉をださないくせに、出せば勝てる
という根拠の無い自信ででかい態度を取ってるだけに見えるぞ。

127:デフォルトの名無しさん
07/11/18 19:33:41
>>124
むしろselfがキーワードでないのは半端に思えるんだが。

呼び出すときには
obj.method(arg)
と書けるのに
定義では
def method(self, arg):
と書かなければならないのも、汚い。selfがキーワードでないために
こう書かなければならないのだとしたら、それこそバカげている。

メンバアクセスを self.member のように書かせること自体は、
可読性のために良いと思えるんだが。

128:デフォルトの名無しさん
07/11/18 19:44:45
>>127
class.method(obj,arg)

129:デフォルトの名無しさん
07/11/18 19:49:32
>>128
常にそう書かせるのであれば一貫性はある。だが、実際にはそうではない、でしょ。
限定的に
obj.method(arg) にだけ第一引数省略の特権を与える合理的な理由があるとは
思えない。


130:デフォルトの名無しさん
07/11/18 19:52:57
関数がファーストクラスオブジェクトでない言語しか
知らないゆとりカワイソス


131:デフォルトの名無しさん
07/11/18 19:56:34
>>130
それ、全然関係ないだろ
OCamlでクラスのメソッドを定義する時に、いちいち第一引数の
selfなんて書かせないぞ

Pythonがそうであるのは単に実装都合であり、要は手抜きだ

132:デフォルトの名無しさん
07/11/18 20:08:48
第一引数のself書かせないと。それは不便だな。

133:デフォルトの名無しさん
07/11/18 20:12:38
君らの脳内の解釈より、他人が見た時の可読性が重要なんだよ。


134:デフォルトの名無しさん
07/11/18 20:12:52
それがインスタンスメソッドなら第一引数がレシーバであるのは自明で、
定義に明示的にselfを書かせないとしても、レシーバを第一引数にして
クラスメソッドとして呼び出せるようにすることも出来る。

インスタンスメソッドにわざわざ常にselfを明示的に書かせるPythonは
センスが無い。

135:デフォルトの名無しさん
07/11/18 20:13:47
>>133
レシーバのselfをわざわざ書かせることも、それが実はキーワードでも
何でもなくて、sと書いてもいいことも、可読性の向上に何ら貢献しないのだが。

136:デフォルトの名無しさん
07/11/18 20:18:47
>>135
それは、あなたが賢いからなのでしょうね。私には少なくとも可読性の向上に貢献しています。


137:デフォルトの名無しさん
07/11/18 20:18:59
1) メソッドには第一引数が必要という割り切った仕様。欠点より利点が多いことは,ゆとりプログラマ以外には説明不要なほど自明なこと。
2) 暗黙に第一引数の名前が決まっていた方がみんな便利。
3) だからselfと書く。

これが分からない奴は他の言語使えばいいと思うよ。

ぶっちゃけクラスメソッドの場合の第一引数はclsだぜ。
文盲でない奴はPEP8を読もうな。日本語訳もあることだし。

138:デフォルトの名無しさん
07/11/18 20:22:52
>>137
「欠点より利点が多い」理由を説明してくれ。
obj.memfunc()
だけを省略可能にする合理的理由についてもな。

決まっていたほうが便利というのなら、それこそコンベンションでなく
キーワードにしろ、と。

あんたはPythonが現にそうである、という説明をしているだけだ。
それが良いものであるかどうかという説明にはなっていないぞ。

139:デフォルトの名無しさん
07/11/18 20:27:39
 

140:デフォルトの名無しさん
07/11/18 20:30:15
929 名前: デフォルトの名無しさん [sage] 投稿日: 2006/10/18(水) 23:39:44 
(´-ω-`) 

Guidoは疲れ切っていた 
煩雑な構文、人によって違うスタイル、そして見えない変数に。 



(´-ω-`)Zzz 

そして眠ってしまった。しかし…… 



ヒラメキ━━(゚∀゚)━━!! 

単純な構文!スタイル強制!変数はすべて明示!! 



俺言語デキタY⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)!!! 

switch...case欲しいだと? (゚Д゚ )ヤダ!! 
インデント構文がSM? (*´д`*)ハァハァ 
クラスの記述が面倒? ( ´_ゝ`)フーン Javaでもやれよ 
変数を暗示で使えるようにだと? (^A^)っPerl 


俺言語ヽ(´ー`)ノバンザーイ 


141:デフォルトの名無しさん
07/11/18 20:30:49
obj.memfunc() が本当に省略なのかについて


142:デフォルトの名無しさん
07/11/18 20:32:38
欠点:
 ゆとりが理解不可能なこと。
利点:
 それ以外全部(wwww

>obj.memfunc()
>だけを省略可能にする合理的理由についてもな。

意味不明。ゆとりなりに頭を使って,丁寧に説明してくれよ。
それが礼儀ってものだろ(wwwwww

>決まっていたほうが便利というのなら、それこそコンベンションでなく
>キーワードにしろ、と。

嫌だね。たまにはselfというローカル変数を作りたくなることもあるし(www

>あんたはPythonが現にそうである、という説明をしているだけだ。

そして,お前はまずPythonの現状をよく調べろ。
作者タソがみずからselfの存在意義について言及している文章がたくさん見つかるよ。
あ,ごめん,日本語もできないゆとりが英語なんて読めるわけないよな(wwwwwwwwwww

143:デフォルトの名無しさん
07/11/18 20:34:30
>>138
>決まっていたほうが便利というのなら、それこそコンベンションでなく
>キーワードにしろ、と。

キーワードは主にパーサーのためにあるのであって,ゆとり脳のためにあるのではないのだが。

144:デフォルトの名無しさん
07/11/18 20:34:47
説明できない人は要りません

145:デフォルトの名無しさん
07/11/18 20:37:01
Python信者発狂。
インスタンスメソッドのレシーバにselfだのthisだの書かせない
大半のオブジェクト指向言語よりPythonの方法のほうが「いいものだ」
と無根拠に主張して、その理由は説明できんらしいな。


146:デフォルトの名無しさん
07/11/18 20:38:08
>>142
あまりイジめちゃ可哀想だよ。この議論、ゴールドセイントにスティールセイントが戦いを挑むようなモンなんだから。


147:デフォルトの名無しさん
07/11/18 20:38:38
>>145
いやいや信者かどうかは微妙だぞ。
ここぞとばかりに荒そうとしているのかもしらん。
かなり頭悪そうだからなあw

148:デフォルトの名無しさん
07/11/18 20:38:42
> 嫌だね。たまにはselfというローカル変数を作りたくなることもあるし(www

Python信者は自分の都合に応じて「可読性」と言い、
時にはselfというローカル変数を作ってコードの読者を罠にはめるわけか。

で、classだのwhileだのforだのinだのというローカル変数を作りたくなることは
ないのかい?

149:デフォルトの名無しさん
07/11/18 20:41:38
他の予約語がもっと多い言語を使っているヤツがゴチャゴチャ言うな。


150:デフォルトの名無しさん
07/11/18 20:43:32
何だその煽りにもなってない煽り。

151:デフォルトの名無しさん
07/11/18 20:44:31
>>145
逆に大半のオブジェクト指向言語の方法のほうが「いいものだ」という、あなたの根拠を聞きたいものだね。


152:デフォルトの名無しさん
07/11/18 20:44:48
喧嘩すんなよ。というか、self云々はスレ違いだろ。
selfはウゼーってことで終了しようよ。

153:デフォルトの名無しさん
07/11/18 20:46:08
>>148
>で、classだのwhileだのforだのinだのというローカル変数を作りたくなることは
>ないのかい?

ぶっちゃけないよ(wwwwwwwwwwwwwwwwwwwwwwwwwww

154:デフォルトの名無しさん
07/11/18 20:46:41
>>153
selfはあるのに?

論理破綻はなはだしい。

155:デフォルトの名無しさん
07/11/18 20:47:33
>>148
高々20数個の予約語も覚えられず,予約語と同名の変数を作りたくなることがあるとは!!!
ゆとり脳恐るべし!!!!!!!

156:デフォルトの名無しさん
07/11/18 20:48:06
>>151
インスタンスメソッドの第一引数は自明なのだから、その定義において
毎回それを書かせるのは、obj.mem(obj)が冗長であるのと同じ理由で
冗長であり、可読性にも貢献しない。それで十分では?

157:デフォルトの名無しさん
07/11/18 20:48:09
>>155
お前は文盲か。


158:デフォルトの名無しさん
07/11/18 20:49:10
>>154
155が言っているとおり,予約語と分かっているキーワードを変数名として使いたくなることなんてねえよ(wwwwwwwwwwwwwwwwwwwww

159:デフォルトの名無しさん
07/11/18 20:49:44
>>152
全てのselfがウザいと言っているのではない。
インスタンスメソッド定義にわざわざ「常に」selfと書かせるのが
ウザいと言っている。

「常に」書くってどういう意味かわかるか?
場合わけがそもそも存在しないんだから、それは自明なんだ、自動化できるんだ。
それをわざわざ人手でやらせてるんだ。
馬鹿馬鹿しいことこの上ない。

160:デフォルトの名無しさん
07/11/18 20:50:10
>>158
文盲がお前とアイツと二人いるってことか

161:デフォルトの名無しさん
07/11/18 20:51:21
>>158
つまりselfがもともとキーワードとして設計されていれば、文句を
言わないわけだ。
自分のバカさ加減、論理矛盾に全く気づいていないようだねえ。

162:デフォルトの名無しさん
07/11/18 20:52:21
>>159
>インスタンスメソッド定義にわざわざ「常に」selfと書かせるのが
>ウザいと言っている。

self書かない方が逆にまぎらわしくね?(wwwww

163:デフォルトの名無しさん
07/11/18 20:54:11
>>162
メソッドのプリフィックスにm_つければおk

164:デフォルトの名無しさん
07/11/18 20:56:11
(w

で抽出すると、バカが浮き彫りになりますな。

165:デフォルトの名無しさん
07/11/18 20:57:29
>>164
164が抽出されました(wwwwwwwwwwwwwwwwwwwwwww

166:デフォルトの名無しさん
07/11/18 20:58:04
で、別にselfはもういいでしょ。
見る人によって利点でもあり欠点でもあるってことで。
すれ違いのことで喧嘩するとか、まともな大人とは思えませんよ。

167:デフォルトの名無しさん
07/11/18 20:58:57
>>165
小学生ですかあなたは。

168:デフォルトの名無しさん
07/11/18 20:59:14
だいたいさあ、Python全肯定しちゃう人ってなんなの?Pythonと自我が融合してんの?

169:デフォルトの名無しさん
07/11/18 21:00:17
しかしキーワード増やせなんてプログラマの発言とは思えんな

170:デフォルトの名無しさん
07/11/18 21:01:18
ようするにですね、僕がselfを持ち出したのは、>>166の結論を
selfに対してではなく、ブレースvsインデントの議論に対して
導ければと思ってなのです。ですからスレ違いではありません。

171:デフォルトの名無しさん
07/11/18 21:01:38
selfに欠点があるのは認めるよ。
そして星の数ほどの人間が、selfをなくす提案をしてきたんだ。
でもそのたびに、self不要論者は論破されて負け続けてきた。
そして誰も、selfなくせと言わなくなりましたとさ。

172:デフォルトの名無しさん
07/11/18 21:02:05
別にselfをキーワードにしなくても、省略可能にすることは可能だろうけどね。

173:デフォルトの名無しさん
07/11/18 21:06:35
もう俺言語を作るしかない。基本は型無しのC#。これ。

174:デフォルトの名無しさん
07/11/18 21:08:55
>>171 からすると、
ここでselfについて議論しているヤツらはソースが英語だからと言ってチェックを怠ったヤツらの集まりということで終了。


175:デフォルトの名無しさん
07/11/18 21:17:14
残念。2chはその英語のソースをチェックしない人たちの集まりなのです。

176:デフォルトの名無しさん
07/11/18 21:18:24
まあFAQなんだけどな。

URLリンク(www.python.org)

ゆとり脳のためにFAQを翻訳してやるけど,「よくある質問」ってやつだよ。
英語を勉強して5年後くらいに読んでみれば?(wwwwwwwwwwwwwwwwwww

177:デフォルトの名無しさん
07/11/18 21:21:42
虎の威を借る狐だな

178:デフォルトの名無しさん
07/11/18 21:25:14
頭のないゆとりよりはマシだろう

179:デフォルトの名無しさん
07/11/18 21:25:27
>>176
理由の1および3は、メソッド定義の第一引数のselfが好ましい理由の説明に
なってないな。
常にself.memberと書かせたほうがいい理由にしかなっていない。そしてそれは
別に否定はしない。

理由の2については、clazz.mem(obj, arg)と書けていいよ、と言っているわけだが、
別にメソッド定義でわざわざselfを手で書かせなくとも、そう呼び出せるように
設計することは可能なわけで、理由としては非常に弱いと言わざるを得ない。

180:デフォルトの名無しさん
07/11/18 21:30:41
ところで159は自分が場合分けしてる事に気づいてない模様

181:デフォルトの名無しさん
07/11/18 21:31:43
バカがひとりいると、バカを納得させるために細かいルールを作る必要がある。
バカは大抵暇だから、バカほど声が大きい。バカには仕事をさせない方が組織の能率が上がるから。
それがウザイので、他の言語に行ってくれていいよ。

182:デフォルトの名無しさん
07/11/18 21:34:53
>>176
次からは、生半可な自分の知識で煽って壮絶に敗北する前に、そのURLを提示するんだ。

今回の経験を生かせば、お前もようやくゆとり脱出の足がかりが出来たことになるよ。

183:デフォルトの名無しさん
07/11/18 21:36:31
>>180
Pythonは第一引数のselfのありなしでインスタンスメソッドかどうかを
判別しているのではない、でしょ。
つまりselfは冗長で余計。
selfをsとか書けたからといって、Python信者が好きな可読性とやらが損なわれるだけ。

184:デフォルトの名無しさん
07/11/18 21:37:25
>>182
問題提起する前にFAQを先に読んどけよ(wwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwww

185:デフォルトの名無しさん
07/11/18 21:38:16
草はやし過ぎ
>>179に自分で回答できるぐらいの頭はないのか
無いんだろうな

186:デフォルトの名無しさん
07/11/18 21:38:46
>>181
今ここに実例がいますしね(あなたのことではありません。念のため)

187:デフォルトの名無しさん
07/11/18 21:40:47
あえて言おう、ググレカス、と(wwwwwwwwwwww

188:デフォルトの名無しさん
07/11/18 21:41:10
>>184
知ってる?
2chで煽りに使われるwの数は、自身の悔しさ度が反映されるんだよ?

実際どんどん多くなってるでしょ?イライラしすぎでみてらんない。

189:デフォルトの名無しさん
07/11/18 21:42:09
>>186
そう、あなたのことです。(念のため)

190:デフォルトの名無しさん
07/11/18 21:45:44
自分のことを言われていると思ったのか…

191:デフォルトの名無しさん
07/11/18 21:47:19
こういう時のために2ch先人たちは「オマエモナー」という予約語を用意してくれているようですね。


192:デフォルトの名無しさん
07/11/18 21:48:14
>>190
Pythonのルールに従えないバカに言われたくないだけ

193:デフォルトの名無しさん
07/11/18 21:49:31
Pythonを使う際にルールに従うのは当たり前ってか、そうじゃなきゃ使えない
言語設計に疑問を持つのは別の次元の話

Python信者は頭が良すぎて感心するわ


194:デフォルトの名無しさん
07/11/18 21:51:36
じゃあ、宴も酣ですし、そろそろ>>170に、ここらインデントの議論に導いてもらいましょうか。

195:デフォルトの名無しさん
07/11/18 22:14:00
170は逃げたようです

196:デフォルトの名無しさん
07/11/18 22:34:23
逃げたんじゃないよ、
FAQを読んでるんだよ(wwwwwwwwwwwww


197:デフォルトの名無しさん
07/11/18 22:37:32
(w クンは黙っててください。息が草臭いです。

198:デフォルトの名無しさん
07/11/18 22:38:32
(wも予約語にすればいいんじゃね?ww

199:デフォルトの名無しさん
07/11/18 22:41:32
    _, ._
  ( ・ω・) んも~
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)wvwwWWwvwwWwwvwwwwWWWwwWw


200:デフォルトの名無しさん
07/11/18 23:40:38
草刈りなんてしてないでインデントの議論に導いてくれよ>170

201:デフォルトの名無しさん
07/11/18 23:48:24
私は170ではありませんまので、その問いは意味が不明です。

202:デフォルトの名無しさん
07/11/19 00:42:35
個人的にself以外の文字列をselfに使ってる人居ませんか?

203:デフォルトの名無しさん
07/11/19 00:48:31
myがいいね。my希望

204:デフォルトの名無しさん
07/11/19 02:52:07
まず、Pythonにあるのは関数で、メソッドではない。
obj.method という式は、 class.method の第一引数に obj をbindしている。
なので、
m = obj.method
m()
とするだけで delegate になる。

205:デフォルトの名無しさん
07/11/19 03:01:04
次に、selfを省略できないワケ。
動的言語は、オブジェクトのメンバがコンパイル時に決まらない。
変数の参照で、その変数がローカル変数なのかメンバ変数なのかが
関数の定義を見るだけで区別できないのは非常に危険なので、メンバ
変数への参照はローカル変数への参照から区別しなければならない。

Rubyはメンバ変数を区別するのに専用の記号とルールを用意したが、
それはあまりPythonicでは無いだろう。

206:デフォルトの名無しさん
07/11/19 10:43:59
>>204
@classmethodとか書かせるし、チュートリアル等のドキュメントで
しっかり「メソッド」と書いてあるのに、
>Pythonにあるのは関数で、メソッドではない。
というのはどういう意味で言ってるんだ?


207:デフォルトの名無しさん
07/11/19 11:53:41
↓こういう風に書けるってことだと思うが、
本当のところは本人に聞いてけろ。

class ClassA:
    def __init__(self):
        self.x = "hello"
    def methodB(self):
        print "B:", self.x

def funcC(self):
    print "C:", self.x

ClassA.methodC = funcC
funcB = ClassA.methodB

a = ClassA()

a.methodB()
funcB(a)

funcC(a)
a.methodC()


208:デフォルトの名無しさん
07/11/19 12:18:17
なるほど、意図は理解した。
JavaScriptでもそのように書けるが、JavaScriptでは引数のthisは書かなくていいな。

209:デフォルトの名無しさん
07/11/19 15:16:26
>Rubyはメンバ変数を区別するのに専用の記号とルールを用意したが、
>それはあまりPythonicでは無いだろう。

オレはこれが嫌いでRubyやる気無くした(ww。

関数っつーか,厳密に言うと「呼び出し可能オブジェクト(callable object)」だと思う。
ゆとり脳に理解不能な話題はやめてさ,そろそろインデントの議論に戻らないか?

210:デフォルトの名無しさん
07/11/19 19:34:17
>Rubyはメンバ変数を区別するのに専用の記号とルールを用意したが、
>それはあまりPythonicでは無いだろう。

privateなメンバはアンダーバーを二つつける、という、割とよく似た性質のルールがPythonにもありますけど。

Pythonicでは無いから、とか意味不明な理由を持ち出すのは止めといたほうが。

211:デフォルトの名無しさん
07/11/19 19:36:35
>>202
Python3.0になったら「俺」にする予定

212:デフォルトの名無しさん
07/11/19 23:18:06
>>210
そのルール知らなくても、private使わないでプログラム書くのは簡単。
そのルール知らなくても、他の言語のプログラミング経験があれば
そのルールを使ったプログラムを読むことが可能。
それがRubyやPerlの「知らなきゃ読めない」ルールとの差。

Python方式でもRuby方式でも実現できることを、Python方式で
実現しているということに、「Pythonicだから」という以上の理由が
何故必要?

213:デフォルトの名無しさん
07/11/21 00:26:15
>>212
あのさぁ、その「知らなきゃ読めない」とかも意味不明だってことに気づいてないでしょ。

例えば、"リストの内包表記"を知らなくて読むことが書くことが出来るか?
出来ないんだよ。

もし「それぐらい推測出来る」とかバカ言うなら、Rubyの@つけるルールだって推測できるだろ。



>Rubyはメンバ変数を区別するのに専用の記号とルールを用意したが、
>それはあまりPythonicでは無いだろう。

第一、210のレスは↑に対するレスだって理解できてる?

Rubyのようにメンバ変数を区別するのに専用の記号とルールを用意するりはPythonicじゃないとかアホ言ってる奴に
Pythonにも既に似たようなルールがあることを教えてやってんだよ。わかる?
お前のレスの意味不明さが。

次はせめて中学校卒業してからレスしてな。

214:デフォルトの名無しさん
07/11/21 00:31:15
インデントは・・・

215:デフォルトの名無しさん
07/11/21 00:33:40
インデントはとても合理的だけど、
ブレースによる制御構造も混在しててもいいんじゃないかと思う。

216:デフォルトの名無しさん
07/11/21 00:41:45
>>213
イタタタタ(wwwwwwwwwwwwww

217:デフォルトの名無しさん
07/11/21 04:22:38
関数の右とかifやwhileの右とかの「:」も知らなきゃ書けん罠

218:デフォルトの名無しさん
07/11/21 07:43:36
>>213
Java系言語一つでも知ってたら、 self.foo を見て、これは this.foo だと気づく。
@foo を見ても判らんだろ?

self.__foo を見て、private変数だと判らなくてもプログラム読めるだろ?
しかも、なんとなく他人が気軽に触っちゃいけない雰囲気かもしだしてるだろ?

内包表記も、他の言語で内包表記見たことあるなら一瞬で判るし、
そうでなくても後でリストとして利用している部分を見れば雰囲気で判るはずだ。

それでもって、private変数もリストの内包表記も、使わなくても普通に
プログラム書けるだろ?なら特殊ルール導入しても良いのがPythonic
なんだよ。
論点は特殊ルールの存在自体ではなくて、その特殊ルールを知らなくても
プログラムが読める&使わなくても普通に書けるって事。

219:デフォルトの名無しさん
07/11/21 09:38:00
三行でおk

220:デフォルトの名無しさん
07/11/21 10:55:11
>>218
> Java系言語一つでも知ってたら
メジャーな言語との類似性から来る類推性、分かりやすさ、
習得しやすさおよび学習・移行の容易さを重視するんなら、
現状では好む・好まざるに関わらず、C系のシンタクスがベストだよ。
そういう意味ではself.fooではなくthis.fooのがずっといい。
selfをmeとか書いてもいいなんてのは論外だ。

__init__だの__call__だのが@と大して違いがあるとも思えんな。
単にPerlチックな記法が嫌いなだけじゃないのか。

221:デフォルトの名無しさん
07/11/21 10:59:04
既存の言語に似せていないのに無根拠に「こっちのが分かりやすいだろ」と
Pythonicという名前の宗教を押し売りするんだよねえ

既存のメジャーな言語に似ているものが多くの人にとって読みやすく
理解しやすいことは、自明なわけだが

222:デフォルトの名無しさん
07/11/21 11:06:23
メジャーな言語ってこうですか?わかりません><

<main>
    <print>Hello, world!</print>
</main>


223:デフォルトの名無しさん
07/11/21 11:17:36
SGML系はプログラミング言語じゃねえし、
プログラミング言語じゃない言語で一番メジャーなのは英語だろw

224:デフォルトの名無しさん
07/11/21 11:27:21
XSLTはプログラミング言語と言って差し支えない気がする

225:デフォルトの名無しさん
07/11/21 17:26:10
メジャーなのに似てるかとか読みやすいとかどうでもいいが
_と@が同じとか言う奴はヤバい

226:デフォルトの名無しさん
07/11/21 18:22:11
なんか>>218を見て、作って欲しいプログラムの要件を説明するときに
「ここをこうやって (画面の前でぐっと握り拳を握る) ぐーっといろいろやって
(拳に力を込めてゆっくり動かす) ぱーっと結果を出すだけ (力を抜いて掌を開く)
でいいんだけど、簡単にできるよね」

とやってくれたオヤジを思い出した。
いや思いこみはわかるけど、わからんてばw


227:デフォルトの名無しさん
07/11/21 20:29:51
>>220
>__init__だの__call__だのが@と大して違いがあるとも思えんな。
だーかーらー、コンストラクタというものを知っている人なら __init__ を見て
それがコンストラクタだって推測しやすいだろ? @ で何を推測しろと?

228:デフォルトの名無しさん
07/11/21 20:39:27
>>227
コンストラクタならクラスと同名のが多くのプログラマにとっては
分かりやすいに決まってるだろうに

__init__()と__new__()という一見似ているが違うものがあって……なんちゅうことを
何にも知らない奴が読んで「推測」できるかw

229:デフォルトの名無しさん
07/11/21 20:48:21
そもそも、Pythonicってのが宗教だから意味ないと言うのなら、
Perl, Python, Ruby が平行して存在している意味がない。

end がイヤならPythonにすれば良いし、self. がイヤなら Ruby にすれば良いし、
どっちもイヤなら自分で新しい言語作ればいい。

230:デフォルトの名無しさん
07/11/21 21:03:18
>>228
そこまで細かい部分推測しなくても読めるじゃん。
__new__知らなくてもクラス書けるじゃん。

クラスもオブジェクトな言語でコンストラクタをクラス名と同じにすると、
クラス名が変わったときにコンストラクタで混乱するじゃん。

それに、他の言語のマネルールをいろんな言語から持ってきたら結局
判りにくくなる。それなら最初からC++なりJava使えば良い。
__init__とか__call__とか、言語にとって特殊な意味のある名前は__foo__の
形をしているというメタルールを一つ導入するだけで、覚えないと
いけない予約語を大幅に減らせる。

231:デフォルトの名無しさん
07/11/21 22:14:35
んだから、__fooだの__bar__だのの意味、あんたの言うメタルールは、
教わらなきゃわからんだろ
@と何の違いがあるんだ?

232:デフォルトの名無しさん
07/11/21 22:28:05
>>225
>_と@が同じとか言う奴はヤバい

激しく同意。まったく意味不明。

233:デフォルトの名無しさん
07/11/21 23:10:33
>>221
メジャーな言語に似せるつもりならインデントなんてやらねーよ。

234:デフォルトの名無しさん
07/11/21 23:25:43
#!/bin/env ruby
def class Hage
  fuga = 2

  def hoge
    fuga = 1
  end

  def hige
    p fuga
  end
end

h = Hage
h.hige
f = Hage
f.hoge
f.hige


235:デフォルトの名無しさん
07/11/21 23:41:06
Ruby って色んな所で躓くよな
まったく初心者向けじゃない

236:デフォルトの名無しさん
07/11/21 23:48:42
RubyのことはRubyのスレでやっとくれ

237:デフォルトの名無しさん
07/11/25 15:08:57
しばらくぶりに来てみたらスレが伸びてるw

238:デフォルトの名無しさん
07/11/25 19:47:32
>>231
こういうやつは、マニュアルとかは読まないで全て始めるのか?
分かんないもの出てくりゃ調べればいいじゃん。
自分が最初にPythonの__やRubyの@に馴染めませんでしたって、
過去の恥を晒してるだけじゃん。

239:デフォルトの名無しさん
07/11/25 20:09:43
バカがいるとスレが伸びる(wwwww
バカが居なくなったからスレが沈静化した(wwwwwwwwwwwwwwwwwwwwwwww

240:デフォルトの名無しさん
07/11/25 22:36:44
延ばすな馬鹿


241:デフォルトの名無しさん
07/11/29 23:57:38
止まっちゃった・・・

242:デフォルトの名無しさん
07/12/01 00:09:47
本当に止まっちゃったね。

インデントについての話じゃなく、selfの是非とか話題がそれると盛り上がるところを見ると、
Pythonのインデントによる制御構造って言うほど悪くないんじゃない?どっかの専門家が
言った意見を素人がそのまま自分の意見として言っているようにしか感じないね。


243:デフォルトの名無しさん
07/12/01 00:42:40
慣れの問題でしかないからな
要は構造が示せればいいだけなわけだし
括弧でもインデントでもフローチャートでも

インデント使うと括弧の対応を自動でチェックしたりしてくれない
素のエディタでもさほど問題にならない、程度の事じゃないかな

244:デフォルトの名無しさん
07/12/01 06:12:37
実際 Python 使ってみると
インデント崩れで起こるトラブルよりも
それ以外の原因でいっぱいトラブルからなぁ


245:デフォルトの名無しさん
07/12/01 08:13:34
>>244
ウンウン、頭が悪いといろいろ大変だよね。

246:デフォルトの名無しさん
07/12/01 09:28:34
一番トラブルのはcopy忘れだな

247:デフォルトの名無しさん
07/12/02 01:06:30
悪くはないけど良いとも思わないってのが正直なところ
実際にはどうでもいい

248:デフォルトの名無しさん
07/12/02 01:17:37
インデントは全然苦にならないんだけど式と文が区別されてて
代入したものをすぐ次の用途に使うときとかに面倒なのが気になる


249:デフォルトの名無しさん
07/12/02 09:29:59
>>248
>代入したものをすぐ次の用途に使うときとか

そんなuglyなコードを書く人とは一緒に仕事したくありませんね。

250:デフォルトの名無しさん
07/12/02 09:50:37
一度代入したら十年は寝かさないとね

251:デフォルトの名無しさん
07/12/02 10:03:28
そうじゃなくてさ。
たとえば、代入と評価は分けて書いた方がいいよね。

252:デフォルトの名無しさん
07/12/02 10:18:16
おめーの次のセリフはこうだ
「ワンライナーを侮辱するなJOJO」

253:デフォルトの名無しさん
07/12/03 23:37:47
ワンライナーを侮辱するなJOJO!・・・ハッ!

254:デフォルトの名無しさん
07/12/04 10:05:16
どうも。インデントは、どうせ言われなくてもやるから、それほどは
違和感を感じてない初心者です。

でも文法的にインデントをブロックの識別に利用しているのなら、
IF 文の末尾に : (コロン) を付けなくても、次の行がインデントして
るならブロック開始なんだから : はいらない子なんじゃないの?
……という疑問が拭えません。

どうして : があるのか、どなたかすっきりさせてください。

255:デフォルトの名無しさん
07/12/04 10:11:15
if condition == True: break;

みたいな書き方をしたい場合はある。こういう場合はコロンがないと超不便。

256:デフォルトの名無しさん
07/12/04 10:29:49
でもそれは : じゃなくて ; でも同じだからな
次の行に回した時にも省略できない理由にはならないし

257:デフォルトの名無しさん
07/12/04 11:43:00
必要か必要でないかだけを言えば必要ない。

でもこの二元論は、
forいらねwhileだけでいいだろとか、
他の言語いらね真のプログラミング言語Lispが既にあるとか(w
そういうたぐいのものに近い。

コロンが使われている理由を探すとすれば、
ABC言語の影響を受けているというのと、ある方が見やすいだろっていう辺りになる。
URLリンク(mail.python.org)


258:デフォルトの名無しさん
07/12/04 21:07:17
コロンが付いている理由はエディッタのオートインデントの実装が楽だからだと Guido がどっかで言ってた記憶が

259:デフォルトの名無しさん
07/12/04 21:07:39
if の : はなんとか納得できるんだけど
else の : はなくてもいいような気がする

260:デフォルトの名無しさん
07/12/04 21:15:38
あーその話で思い出したけど、
forにelse使えるなんて、最初何かの間違いかと思ったよ

261:デフォルトの名無しさん
07/12/04 21:20:26
>>257
>forいらねwhileだけでいいだろとか、
>他の言語いらね真のプログラミング言語Lispが既にあるとか(w

小さい悩みだなw
そんな事言われて気にしてるなよ…

262:デフォルトの名無しさん
07/12/04 21:23:27
>>260
forとかwhileを抜けたあとで
全部の要素ループして抜けたのか
途中で中断して抜けたのか
知りたいときって結構あるんだよね
Pythonは痒いところに手が届きますな


263:デフォルトの名無しさん
07/12/05 01:18:44
>>262
>Pythonは痒いところに手が届きますな

細かいところまで練られている感じがするよね。
Pythonの良いところだと思う。

264:254
07/12/05 09:43:14
>>255
そういう書き方が出来なくても、Python 的には困らない気がします。

>>257
良いポインタの紹介ありがとうございます。やはり冗長だと思ってる
人はいるのですね。

それにしても、キータイプ数を減らすのではなく、冗長性を減らすの
でもなく、見易さを求めるのが Pythonic ってことなんだと受け取って
よいのでしょうか。

Python を触り始めて、面白いとは思っていますが、そのコンセプトが
まだ掴めなくて……ちょっともどかしいカンジの初心者です。

265:デフォルトの名無しさん
07/12/05 11:10:26
悟れ。

266:デフォルトの名無しさん
07/12/05 13:18:56
import this

267:デフォルトの名無しさん
07/12/05 21:51:41
かゆい所に手が届くくらい練られてるならswitchを作れ!
手が届く範囲だけ痒いって言ってるだけだろ自己満足だ!

268:デフォルトの名無しさん
07/12/05 22:10:29
switchはelseifで大抵代用可能だが
elseifはswitchで代用不可能なケースが多い


269:デフォルトの名無しさん
07/12/05 22:45:56
>>267
目の玉がかゆいのなら
目の玉を取り出さないと掻けないぞ(wwwwwwwww

270:デフォルトの名無しさん
07/12/05 22:49:44
これか
URLリンク(ja.wikipedia.org)


271:デフォルトの名無しさん
07/12/06 12:32:15
:が見やすいかどうかはフォントによるな。
次はエディタのフォントも言語仕様になるのかな。

272:デフォルトの名無しさん
07/12/06 12:42:02
>>268
代用できるっちゃできるが、
if c == 1:
elif c == 2:
elif c == 3:
とかいうif~elifの羅列は、switchのほうがずっと綺麗に書けるでしょ。
if~elifだと、変数名を変えたら分岐の数だけ直さなければならなくなる。
「他で代用できるものは要らない」と言うのなら、Pythonは要らないものだらけだよ。

273:デフォルトの名無しさん
07/12/06 12:53:00
Pythonっていろいろ理由付けてるけど、
最終的にはGuidoの好みだからなぁ。
まともに反論してると馬鹿を見る

274:デフォルトの名無しさん
07/12/06 13:47:59
>>272
それをswitchで書き換えてずっと綺麗になった!と言うのはセンスを疑う

275:デフォルトの名無しさん
07/12/06 13:48:20
>>271
>次はエディタのフォントも言語仕様になるのかな。

なるわけないだろバカじゃね???(wwwwwwwwwwwwwwwwww

276:デフォルトの名無しさん
07/12/06 14:07:44
>>272
> 変数名を変えたら

そういう状況は、分岐の形式以前の問題になると思う

277:デフォルトの名無しさん
07/12/06 16:10:05
>>273
ソースが公開されているんだし、作者の意向に反してこうした方が良いと思える点があるんなら、自分で改良すればいいんじゃないかな?


278:デフォルトの名無しさん
07/12/06 22:58:53
>>277
それならPythonベースにする必要はないんじゃないかな?
十分ストレスがない言語が別にあればそれを使えばいいんじゃないかな?

279:デフォルトの名無しさん
07/12/06 23:06:48
>>274
まぁ結局センスの問題だわな

280:デフォルトの名無しさん
07/12/06 23:08:23
たいてい
if c == 1:
elif c >= 2 and c <= 8:
elif c == 9:
みたいな使い方することの方が多いからなぁ
rubyのswitchはそれが出来るけど


281:デフォルトの名無しさん
07/12/06 23:24:01
>>273
>Pythonっていろいろ理由付けてるけど、
>最終的にはGuidoの好みだからなぁ。

Guidoの理由付けに反論できるくらいなら、
Pythonを越える言語をデザインできるセンスがあるってことだと思う。

せいぜいがんばって。

282:デフォルトの名無しさん
07/12/07 00:10:50
それくらいは割と誰でも出来そうだな。
その後のモチベーションをキープするのが一番面倒なんだよ。

283:デフォルトの名無しさん
07/12/07 00:23:39
安奈お前の愛の火はまだ燃えているかい

284:デフォルトの名無しさん
07/12/07 01:04:58
>>280
それがswitchでできてもswitchの意味ないわな。


285:デフォルトの名無しさん
07/12/07 04:14:01
if c == 1:
elif c == 2:
elif c == 3:

これってかなりダサいプログラムだよ
普通は関数テーブル作ってcでdispatchだろ


286:デフォルトの名無しさん
07/12/07 08:06:57
エディタのマクロに「行末セミコロンの後はアウトデント」という俺ルールを仕込んでみた

287:デフォルトの名無しさん
07/12/07 08:53:31
じゃあpassのあとに(ry

288:デフォルトの名無しさん
07/12/07 09:33:09
じゃあオレは
セミコロンキーに改行+アウトデントを割り当てときますね


289:デフォルトの名無しさん
07/12/07 10:09:41
>>282
>それくらいは割と誰でも出来そうだな。

がんばって俺言語作れよ。
言いっぱなしは と て も 恥ずかしいぞ(www

290:デフォルトの名無しさん
07/12/07 12:08:50
>>289
恥ずかしいのはお前だよ。本当に丸出しだな。
そんなの大抵のプログラマなら一度は通る道だぜ。

291:デフォルトの名無しさん
07/12/07 12:21:53
というか、俺言語を作った事が無いプログラマってそんなに多いのか?

292:デフォルトの名無しさん
07/12/07 12:43:08
俺言語を作っても、多くの人に受け入れられるものは少ないんじゃない?それができるのならRubyやPythonの開発者のように、それで食っていけるだろうし。
まぁ、できなくてもプログラマとして食ってるヤツは嫌というほど見てきたし、そんなムキになるほどのことでもないような気がするんだけど。ボクはできない方だな (自爆)


293:デフォルトの名無しさん
07/12/07 12:56:52
> それで食っていけるだろうし

えっ、他の仕事もしてるんじゃないの?

294:デフォルトの名無しさん
07/12/07 13:13:43
ぼくちんはただいまヒキコモリちうなんですが、
ぱいそんをべんきょうしているので
いずれはGoogleにはいって、
いちねんくらいでいっしょうつかいきれないくらいのおカネをかせぐつもりでいます!!!
こんなぼくちんをおうえんしてくださいね!!!!!!

295:デフォルトの名無しさん
07/12/07 14:05:11
> えっ、他の仕事もしてるんじゃないの?
「それで食っていける」と「それだけで食っていける」は意味が違うと思います。

296:デフォルトの名無しさん
07/12/07 16:20:46
Pythonに文句あるなら俺言語作れw

297:デフォルトの名無しさん
07/12/07 16:30:32
>>292
この流れでは多くの人に受け入れられるかどうかは話してないだろう。
ユーザ多い=良いとか言ってる奴はPerlあたりの真似しまくって結果Perl以下になって
売りは日本製だけ~みたいなもん平気でつくりそうだ

あとユーザ数で語るならRubyじゃなくてPerlを出さないとお里が知れちゃうゾ懿」�

298:デフォルトの名無しさん
07/12/07 18:32:33
俺言語の話になってることがアホすぎwww

299:デフォルトの名無しさん
07/12/07 19:29:16
>>295
この場合は、
「それで食っていける」=「それで食えるだけの収入がある」=「それだけで食っていける」
じゃないか?

300:デフォルトの名無しさん
07/12/07 21:33:16
switch文でbreak無しのcaseで制御が下に落ちていくようなのは
どうやってelseifで書くの?どうせそんな糞プログラム書くなとか
言って正当化されるのがオチだろうけど!

301:デフォルトの名無しさん
07/12/07 21:34:21
>>293

「それだけで食っていける」!=「その仕事しかしていない」
じゃないかな?


302:デフォルトの名無しさん
07/12/07 22:21:28
>>300

if hoge == 1:
  HOGE
elif hoge == 2:
  FUGA
elif hoge == 3 OR hoge == 2:
  if shine:
    SHINE
  else:
    IKIRO
else:
ORZ


303:デフォルトの名無しさん
07/12/07 22:29:45
>>300

if case1:
 CASE1
if case2:
 CASE2
if case3:
 CASE3
...

ということじゃなくて?


304:デフォルトの名無しさん
07/12/07 23:31:44
>300
結局その記法ってバグなのか意図なのかが
分かりにくくなることが多いし
できるようにするメリットが少ないって判断じゃなかったか?

305:デフォルトの名無しさん
07/12/07 23:34:17
>>303
いや、いちいち break で脱出するコードにしないと次の case もそのまま
実行される仕様の糞言語があるんだ

306:デフォルトの名無しさん
07/12/08 01:15:59
>>300はアレだが>>302もちょっとどうかと思うのは俺だけではないはずだ

307:デフォルトの名無しさん
07/12/08 01:30:55
>>302
それで納得できるのかお前は

308:デフォルトの名無しさん
07/12/08 03:02:42
やっぱRubyだな

309:デフォルトの名無しさん
07/12/08 03:36:02
このタイミングでこういうコメントを入れるから、「こういう書き方もできます」というシンタックスシュガーに踊らされてばかりで
きちんとしたドキュメントも書けない上に、生産性がないのが日本のRubyユーザだと思われるんじゃないかな?


310:デフォルトの名無しさん
07/12/08 08:39:02
Rubyはソースがドキュントだからってことになってるからなぁ
生産性も糞もないよなぁ

311:デフォルトの名無しさん
07/12/08 09:40:24
趣味で作ったプログラムを
1年以上経ってからも
保守する気になる言語

ソレがPythonだっただけだ

312:デフォルトの名無しさん
07/12/08 10:05:22
どの言語で書いても保守する気になるけど?

313:デフォルトの名無しさん
07/12/08 10:12:35
俺はドMなのでRubyで小汚く書いたソースコードでも泣きながら保守するぜ!

314:デフォルトの名無しさん
07/12/08 10:25:27
今まで見た中でこれは酷いと思ったのがZopeなんだが・・・・

315:デフォルトの名無しさん
07/12/08 11:23:17
>>310
Rubyの生産性がないと言っているんじゃない。日本のRubyユーザの生産性がないと言っている。


316:デフォルトの名無しさん
07/12/08 11:42:59
python厨って困るとruby叩きに走るよな。
それも必ず「糞」とか「汚い」とかの言葉が入る。

317:デフォルトの名無しさん
07/12/08 12:42:48
>>316
自惚れるなよ

318:デフォルトの名無しさん
07/12/08 13:14:09
Rubyの話題はどうでもよくね?

319:デフォルトの名無しさん
07/12/08 14:13:59
そろそろインデントの話に戻ろうぜ

320:デフォルトの名無しさん
07/12/08 14:32:22
ム板でインデントのないコードを書き込む奴はDQN

それと、全角インデントにする野郎は氏んでいいよ^^


321:デフォルトの名無しさん
07/12/08 14:34:49
>>320
そういう話だっけw

322:デフォルトの名無しさん
07/12/08 14:35:52
それは、行頭の空白文字列を nbsp に変更するプログラムを
Python と Ruby と Haskell で書いて比較するというお題と
考えてよろしいかな?

↓じゃあ、まず Python から

323:デフォルトの名無しさん
07/12/08 15:46:07
しーん。。。

324:デフォルトの名無しさん
07/12/08 15:54:58
s/^[ ]*/&nbsp;/g

325:デフォルトの名無しさん
07/12/08 16:39:31
話しそれるけど、これって行頭だけでなく全部やっちゃってOKじゃね?

326:デフォルトの名無しさん
07/12/08 16:43:54
>>324
TAB は良いんだっけ?

327:デフォルトの名無しさん
07/12/08 16:53:37
>>326
その前にスペース4個でも8個でも1個の になるって問題点が>>324にはあるぞ

328:デフォルトの名無しさん
07/12/08 16:53:52
お楽しみ中のところ申し訳ないが
ソースを追試する側としては迷惑だからやめてくれ
半角空白でも画面に出ないだけでデータは残ってるから
こぴぺするだけで直るんだが
&nbsp;にされると復元操作が必要になる
復元プログラムをセットで提示してもらわにゃ

329:デフォルトの名無しさん
07/12/08 18:06:47
ほえ?

330:デフォルトの名無しさん
07/12/08 21:20:23
>>328のコピペ環境

&lt; → <
&gt; → >
&amp; → &
&nbsp; → &nbsp; (←何故か変換されない)


331:デフォルトの名無しさん
07/12/09 03:06:42
かちゅーしゃ使ってると、全角インデントが一番読みやすいんだけど

332:デフォルトの名無しさん
07/12/09 03:08:12
>>324は[ ]*が0回以上の繰り返しだから結論としてインデント消えてないか?
あと、キャレット付いてるからgオプション意味ない

333:デフォルトの名無しさん
07/12/09 03:09:39
>>332
いろいろ間違ってる

334:デフォルトの名無しさん
07/12/09 03:22:36
>>271
3.0でバッククオートがなくなる理由は`フォントによっては見づらいから`らしい

335:デフォルトの名無しさん
07/12/09 03:35:15
>>334
フォント、マジだったのかwwww
確かにそこは見にくいことがあるw

336:デフォルトの名無しさん
07/12/09 03:46:38
>>333
うちの環境のsedで試したところ、インデント消えて一律行頭&nbsp;になったけど?
ただし&をエスケープする必要があったけど

337:デフォルトの名無しさん
07/12/09 03:52:26
>>336
sed知らんがな。
結果うp。

338:デフォルトの名無しさん
07/12/09 12:28:44
>>332,336
すまん。酔っぱらって勘違いしてた。

339:デフォルトの名無しさん
07/12/24 01:15:37
self 論議乗り遅れた('A`)

Pythonじゃなくて失礼。
Delphi だと、Selfはかけるけど、with Hoge do 内くらいしか使わないんだよね。

Pythonみたいに、宣言が必要ない言語だと、Self相当は必須なんだね。
よくわかった。

とはいえ、Self必須は面倒だな。
スクリプト言語なのに字数が明らかに多くなる・・・。(perlみたいなのも勘弁だが)
わかりやすい点がいいけどさ・・・


:のつけ時は、いっつも、忘れてわからなくなる。

340:デフォルトの名無しさん
07/12/24 01:31:57
>>3
($#9737◇$#9737)∑

341:デフォルトの名無しさん
07/12/24 01:32:44
$#9737;

342:デフォルトの名無しさん
07/12/24 08:54:54
selfやな奴は普通に s とか _ とか使えば良いと思う。
とくに、人が書き足したりするようなコードでなければ、好き勝手書けば良いと思う。

343:デフォルトの名無しさん
07/12/24 22:37:26
>>342
それじゃあインデントでわざわざ記法を強制するような
Pythonの思想に反するんじゃね??なんでもいいなら
そもそもインデントだっていらなくね?

344:デフォルトの名無しさん
07/12/24 22:39:38
凄い論理だ

345:デフォルトの名無しさん
07/12/24 23:08:44
>>339
何か勘違いしてるような…。

使う使わないは兎も角、大概のOOPLにおいて
self や this みたいな「自身」を参照するものは
何らかの形で存在してる。

Pythonの場合の self 議論は
「メソッドの仮引数に self を明示的に書かなければならない」
ってところじゃないかと。

346:デフォルトの名無しさん
07/12/24 23:12:56
だから "書けば" それでいいじゃん



.... 終了

347:デフォルトの名無しさん
07/12/25 01:21:10
WindowsAPI
hoge(hWnd, xxx);
fuga(hWnd, yyy);


348:デフォルトの名無しさん
07/12/25 01:45:19
それはハンドル
そしてAPIは言語じゃない

349:デフォルトの名無しさん
07/12/25 04:45:10
WindowsAPIは、C言語レベルのAPIだからな。
ハンドル≒OOPのインスタンス=self という解釈なら正しいが、
そうすると、Python が、C言語レ(ry

350:デフォルトの名無しさん
07/12/25 05:50:23
タイトル:Pythonに見られるインデントによる制御構造の是非
【糞スレランク:D】
直接的な誹謗中傷:0/349 (0.00%)
間接的な誹謗中傷:19/349 (5.44%)
卑猥な表現:2/349 (0.57%)
差別的表現:16/349 (4.58%)
無駄な改行:0/349 (0.00%)
巨大なAAなど:16/349 (4.58%)
同一文章の反復:1/349 (0.29%)
by 糞スレチェッカー Ver1.12 URLリンク(kabu.tm.land.to)

Dって微妙だな・・

351:デフォルトの名無しさん
07/12/25 10:38:10
巨大なAAなど:16/349 (4.58%) ってソースコード貼り付けが誤判定されてる気がする

352:デフォルトの名無しさん
07/12/25 22:01:58
タイトル:Pythonのお勉強 Part22
【糞スレランク:E】
直接的な誹謗中傷:0/488 (0.00%)
間接的な誹謗中傷:11/488 (2.25%)
卑猥な表現:8/488 (1.64%)
差別的表現:1/488 (0.20%)
無駄な改行:0/488 (0.00%)
巨大なAAなど:6/488 (1.23%)
同一文章の反復:2/488 (0.41%)
by 糞スレチェッカー Ver1.12 URLリンク(kabu.tm.land.to)

353:デフォルトの名無しさん
07/12/25 22:07:42
>>352
またひとつ糞レスをつけおって・・・

354:デフォルトの名無しさん
07/12/25 22:28:04
if hoge == fuga:
HOGE
else:
FUGA

if hoge == fuga: HOGE
else: FUGA

if hoge == fuga:
HOGE
elsif hoge == hemi:
FUGA
else:
HEMI

if hoge == fuga: HOGE
elsif hoge == hemi: FUGA
else: HEMI


355:デフォルトの名無しさん
07/12/27 02:28:13
結局インデントでブロック指定するのは
たいして利点は無くて欠点が大きいでOK?

356:デフォルトの名無しさん
07/12/27 06:10:08
欠点が無くて利点が大きい

357:デフォルトの名無しさん
07/12/27 06:44:11
ONE WORD, FORCED INDENTATION OF THE CODE, THREAD OVER!!!!!!!!!!!!!!!!!!!

358:デフォルトの名無しさん
07/12/27 09:11:04
インデントはともかくとして
pythonで書くとコードが綺麗になるのが好き


359:デフォルトの名無しさん
07/12/27 21:12:06
言語仕様に頼らないときれいなコードを書けないおとこの人って・・・

360:デフォルトの名無しさん
07/12/27 23:23:04
そうだね。Perl使いはみんな綺麗なコードを書くよね。

361:デフォルトの名無しさん
07/12/28 03:39:25
インデント否定派の人はエディターで自動ディデントできないからって言うのが主な理由?

362:デフォルトの名無しさん
07/12/28 09:38:20
ディデントって何?
ポリデントみたいな物か?

363:デフォルトの名無しさん
07/12/28 09:47:07
インデントの逆

364:デフォルトの名無しさん
07/12/28 10:53:19
アウトデント?

オフデント
バックデント
モドリデント


365:デフォルトの名無しさん
07/12/28 10:57:03
デデンドモリ

366:デフォルトの名無しさん
07/12/28 14:44:59
マジレスするとアンインデントだろ

367:デフォルトの名無しさん
07/12/28 14:59:26
>>359
誰が書いてもある程度読みやすくなるようにできているのだよ。つまり、書き手よりも読み手を
重視しているんじゃねぇの? (でも、インデントの階層が深くなると、書いていて分かりづらく
なってくる。それも狙いかもしれんが。)

368:デフォルトの名無しさん
07/12/28 16:13:28
>でも、インデントの階層が深くなると、

それは他の言語でも基本的には同じ問題で
そうなったら大抵は何か考え直すべきとされてるでそ

369:デフォルトの名無しさん
07/12/28 16:37:37
Pythonもいろいろ工夫してるけど
へぼが書くとやっぱり読みにくい

370:デフォルトの名無しさん
07/12/28 19:38:58
>>367
そんなに強制したいなら変数の命名規則も強制しろ。
そして変数の名前から型が決まるようにすればいい。

371:デフォルトの名無しさん
07/12/28 20:59:40
つまり「ネストの深さ」にも「暗黙の制限」が
かかっているような言語仕様なんですね。
いくらでも深くネストできるけど、やりすぎちゃダメ!という…

372:デフォルトの名無しさん
07/12/28 21:00:27
つシステムハンガリアン

373:デフォルトの名無しさん
07/12/28 21:31:40
>>362>>364>>366
URLリンク(www.python.jp)
この説明ではdedentと言ってる

374:デフォルトの名無しさん
07/12/28 21:50:46
ついでに関数とかメソッドとかブロックの中の行数も制限しようぜ。
5行以内に。

375:デフォルトの名無しさん
07/12/28 22:27:39
「強制すんな!おれは空白を何個入れるかで自己表現してんだ!」って思うか
「これでアホのゴミネストに付き合わなくてすむぜ」って思うかで
プログラマとしての何かが問われるだろう

376:デフォルトの名無しさん
07/12/28 22:45:40
>>370
そんなの強制しなくても命名規則を決めればいいだけ
従わないヤツはチームから除外すれば済むし
それくらいできないヤツはどうせダメなヤツだから
むしろ除外した方がチームのため

377:デフォルトの名無しさん
07/12/28 23:06:19
>>376
だよな。インデントだってコーディングルールを強制すればよいだけで
従わないやつは排除すればいい。インデントを言語仕様で強制する必用
全然ねえよな。Pythonのインデントに関する理屈は屁理屈

378:デフォルトの名無しさん
07/12/28 23:10:52
>>377
>インデントだってコーディングルールを強制すればよいだけで

そうそう。
インデントを廃止するかわりに,ブラケットやendみたいなキーワードを導入すればいいだけの話だよね。
簡単簡単。

379:デフォルトの名無しさん
07/12/29 01:18:06
ブラケットやendみたいなキーワードを強制されるのは嫌だな

380:デフォルトの名無しさん
07/12/29 01:28:23
Ruby書いてるときに

def range(start, end)
..
って書けないのはちょっといやだな

381:デフォルトの名無しさん
07/12/29 01:30:05
ブラケットがキーワードなのか

382:デフォルトの名無しさん
07/12/29 01:50:36
>>375
どちらもアホプログラマにしか思えない

383:デフォルトの名無しさん
07/12/29 02:12:48
自分たちがちゃんとインデントされてるコードを書いてるかどうかという話と
言語仕様としてインデントでブロックをあらわすということは何の関係も無いわけだけど
>>377>>378は何を言ってるんだ?完璧に意味不明

384:デフォルトの名無しさん
07/12/29 07:19:11
378は皮肉だろ。多分

385:デフォルトの名無しさん
07/12/29 09:31:12
・378を皮肉だと分からないヤツ
・「キーワード」が「ブラケット」と「end」にかかっていると思っちゃうヤツ

どっちもPythonistaとして失格。
Monty Pythonでも見ながら基本からやり直した方がいい。

386:デフォルトの名無しさん
07/12/29 10:32:26
>>379
Python でもかけませんがあにか

387:デフォルトの名無しさん
07/12/29 10:38:33
>>385
別にPythonistaとやらになりたくはないがな
静的スコープのない言語なんて願い下げ

388:デフォルトの名無しさん
07/12/29 10:53:07
Pythonは思いっきり静的スコープを採用した言語だが…

389:デフォルトの名無しさん
07/12/29 14:06:52
まぁ378は皮肉としてはどうかと思うが

390:デフォルトの名無しさん
07/12/29 14:12:36
そんなこといったら、>>383のもわかってる煽りだろw

391:デフォルトの名無しさん
07/12/29 14:43:48
>>383に食いつくのはプライドが許さない

392:デフォルトの名無しさん
07/12/29 20:17:51
>>386
これできみはしやわせになれると思うよ。

end = 1

393:デフォルトの名無しさん
07/12/29 20:22:38
389=391はおれげんごをつくった。
でもだれもつかわなかった。

394:デフォルトの名無しさん
07/12/30 00:28:21
そうですか

395:デフォルトの名無しさん
07/12/31 12:26:33
そうです

396:デフォルトの名無しさん
08/01/01 07:34:26
おめでとうございます

397:デフォルトの名無しさん
08/01/04 23:16:45
end があると、endだけの行が大量に発生するのが、コードが間延びしてる感じがしてダサい
pythonの方がエディタで眺めたときに、均等に情報が並んでる感じがして気持ちいい

398:デフォルトの名無しさん
08/01/05 04:29:54
Pythonだとここまでで、インデント終わりってのが明確にわからないのだが、
その辺、どうやってみわけるの?

399:デフォルトの名無しさん
08/01/05 07:25:06
>>398
次の命令のインデントでわかる。
インタラクティブモードの場合は空行を入れることでも可。


400:デフォルトの名無しさん
08/01/05 16:34:08
>>399
やっぱそうか・・・
エディタとかブラウザで、どこまでスクロールすればいいんだろとか不安になるもんで

401:デフォルトの名無しさん
08/01/05 18:18:36
why?
kwsk

402:デフォルトの名無しさん
08/01/05 18:50:31
要するに「ブロック終了」に相当する単語なり文字が目に見えないから不安な気がするってことじゃないか?
自分もpythonはじめたかなり最初の方はそういう感覚があったような気がする

403:デフォルトの名無しさん
08/01/05 20:41:45
こういうコードに遭遇すると殺意沸くよね

def ふにゃふにゃ
  ぴっぽろ
  ぱっぽろ

  # 以下不要なのでコメントアウト
  # ぷんぱか
  # ほにゃらら
   (20行続く)

  # 2008/1/5 追加しました。
  return "こんなところにこんなものが!”
  

404:デフォルトの名無しさん
08/01/05 20:51:11
それはPythonに限らないだろ

String ふにゃふにゃ() {
  ぴっぽろ;
  ぱっぽろ;

  // 以下不要なのでコメントアウト
  // ぷんぱか;
  // ほにゃらら;
   (20行続く)

  // 2008/1/5 追加しました。
  return "こんなところにこんなものが!";
}

405:デフォルトの名無しさん
08/01/05 21:30:30
いや、ちがうんだけど、
なんだかとても眠いので寝る。
続きは夢の中で議論しましょう。

406:デフォルトの名無しさん
08/01/05 22:26:02
じゃ、そうしましょう。
おやすみなさい。

407:デフォルトの名無しさん
08/01/06 00:00:56
俺も夢の中で、まってます

408:デフォルトの名無しさん
08/01/06 01:05:14
じゃあ俺はニシキヘビを持って行くね。

409:デフォルトの名無しさん
08/01/06 13:23:26
なんで来なかったんだよ!

410:デフォルトの名無しさん
08/01/06 13:30:56
ごめん、熟睡しちゃった。テヘ

411:デフォルトの名無しさん
08/01/06 15:01:51
寝て起きたらやり合うのめんどくさくなった

412:デフォルトの名無しさん
08/01/06 17:03:06
Pythonの場合、ブロックを跨いだ場所にカット&ペーストしたら
必ず自分でインデント調整せないかんの?
自動整形とか出来なさそう…まぁ、そういう機能ないエディタだと普段やってることだけどさ

413:デフォルトの名無しさん
08/01/06 18:28:56
ブロックを跨いでるなら自動整形出来るだろ


414:デフォルトの名無しさん
08/01/06 19:24:27
インデント調整ってめんどくさくないんだよ!

415:デフォルトの名無しさん
08/01/06 19:30:36
>>412
>Pythonの場合、ブロックを跨いだ場所にカット&ペーストしたら
>必ず自分でインデント調整せないかんの?

そういう場合、ブロックを関数とかメソッドとかに出来るし
何の関係も無い
カット&ペーストしたら大抵は何か考え直すべき
へぼが書くとやっぱり読みにくい


416:デフォルトの名無しさん
08/01/07 08:15:19
考え直して関数・メソッドにする時にカット&ペーストしない?

417:実際に書いたことあれば疑問に思わないんだけどね
08/01/07 10:42:03
ブロックごとペースとしたらそのブロック全体の
インデントをちょちょいと直せばいいだけ

直すインデントの量は先頭を見れば自明



何か疑問でも?

418:デフォルトの名無しさん
08/01/07 10:49:10
dakara sorega mendou datte hanasi dattandaro

419:デフォルトの名無しさん
08/01/07 10:51:54
ペーストした時点で正しいコードになってるのと
ペースト後インデント直さないと正しいコードにならないのとの違いの話だな

420:デフォルトの名無しさん
08/01/07 10:58:26
めんどうじゃないよ

421:デフォルトの名無しさん
08/01/07 11:41:19
めんどうだよ

422:デフォルトの名無しさん
08/01/07 12:27:11
めんどうじゃよ

423:デフォルトの名無しさん
08/01/07 12:31:50
めんどうでござる

424:デフォルトの名無しさん
08/01/07 12:32:58
めんどうだったら

425:デフォルトの名無しさん
08/01/07 13:18:51
めんどうなんだからねっ

426:デフォルトの名無しさん
08/01/07 13:20:16
カッコで照合する言語の場合は尻尾のカッコの数を間違えて
整合性がとれなくなったりコードがおかしくなったりするわけだけど
その際の確認の手間がペーストよりも後ろ側に来てるだけ

面倒もへったくれもないし議論になってねーっつーの

427:デフォルトの名無しさん
08/01/07 13:28:32
カッコの数を間違えたらSyntax Erorrだと思うが

428:デフォルトの名無しさん
08/01/07 15:23:17
Pythonもブロックのインデントレベルが違うと構文エラー
大らかなのはアセンブラぐらいかな

429:デフォルトの名無しさん
08/01/07 15:43:28
何言ってんの?

430:デフォルトの名無しさん
08/01/07 17:19:08
Python でインデントレベルが変わるのは : の次と
戻す時だけだから他言語での括弧の不整合と同じく
エラーが出るね

431:デフォルトの名無しさん
08/01/07 17:48:15
よく考えろよ。

432:デフォルトの名無しさん
08/01/07 18:23:20
お金は大事だぞ

433:デフォルトの名無しさん
08/01/07 18:53:07
あふぉらっく

434:デフォルトの名無しさん
08/01/07 21:00:00
python 書いたことある人間がうだうだ言うのはともかく
全く書いたり試したりしないで
脳内でイチャモン生成されても的外れだってことさ

435:デフォルトの名無しさん
08/01/07 22:00:38
ていうかエラーが出ない人為的なミスに関して話をしてたのに
なんで「エラーが出る状況ではエラーがでるから同じだなんて」
って話になってるの?

436:デフォルトの名無しさん
08/01/07 23:38:37
ネタスレ状態も悪くないと思う俺がいる

437:デフォルトの名無しさん
08/01/08 12:45:19
>435 が思っているのもネタに過ぎないしな


438:デフォルトの名無しさん
08/01/08 15:08:03
そりゃエラーが出ない人為的状況はインデントの有る無しと関係ないから
つまりスレタイ読めという事

439:デフォルトの名無しさん
08/01/08 16:43:39
だからその時のミスを防ぐ手だてとかリカバリーの方法だよ。
カッコとかendとかある言語の方がいろいろ手を打てる。
たいていは自動フォーマッタが視覚的にミスに気づかせてくれる。
インデントとブロックを両方プログラマの手にあずけちゃうと、
プログラマがミスしたときの保険が無くなる。

440:デフォルトの名無しさん
08/01/08 21:11:44
括弧やendの辻褄で自動フォーマッタが気づかせるレベルのエラーなら
Python でもインデントのレベルの辻褄が合わないから同様に気づくと思うが

441:デフォルトの名無しさん
08/01/08 21:17:25
>>440
書き出すインデントのレベルを勘違するのがミスだろ。
既に勘違いしてるのにどうやって辻褄が合わないことに気づくんだよ。

442:デフォルトの名無しさん
08/01/08 22:30:42
if hige:
  fuga
  fuga
  pass


443:デフォルトの名無しさん
08/01/08 22:32:58
んな奴にぬるい気持ちでコピペさせない、が正しい

444:デフォルトの名無しさん
08/01/08 22:50:15
じゃあ熱く「俺にコピペさせてくれ!オゥイェー!ベイベー!」って言われたらどうするんだよ。

445:デフォルトの名無しさん
08/01/08 23:07:35
コードをコピペすんなよキチガイ

446:デフォルトの名無しさん
08/01/08 23:28:17
じゃぁカットアンドペーストにするよ

447:デフォルトの名無しさん
08/01/08 23:54:46
>>446
天才

448:デフォルトの名無しさん
08/01/09 10:28:47
じゃ俺はコードの代わりにコンセントを使うよ

449:デフォルトの名無しさん
08/01/09 19:09:42
【審議中】
      _,,..,,,,_   _,,..,,,,_
   _,,..,,,_/ ・ω・ヽ/・ω・ ヽ,..,,,,_
  ./ ・ω_,,..,,,,_  l _,,..,,,,_/ω・ ヽ
 |   /   ・ヽ /・   ヽ    l
  `'ー--l      ll      l---‐´
     `'ー---‐´`'ー---‐´

450:デフォルトの名無しさん
08/01/15 16:56:52
まずは言語仕様の問題と開発環境の問題を区別しよう。
話はそれからだ。

451:デフォルトの名無しさん
08/01/15 22:41:42
そんなことより449の審議がいつ終わるかのほうが問題だ

452:デフォルトの名無しさん
08/01/15 22:49:01
CM明けなんじゃない?

453:デフォルトの名無しさん
08/01/26 00:00:07
Python 勉強中のヘタレです。
私も昔の >>402 さんのように終了記号が無いのが不安です。
気が緩んでインデントを間違えてしまう
うっかり者は使うな!という言語なんでしょうか…?
前に Python でコード書いてたら、
急に好きなおにゃのこから電話が来て
電話の後インデントしきってないのを忘れて悩みました。

おにゃのこよりインデントを大事にしろ!
おしゃべりしててもインデントを忘れるな!って言語なんでしょうか。
コードを見ていると綺麗だとは思うのですが、
書くときは正しくヘビのように絡み付いて
縛り付けられる感じがして辛いです。

皆さんインデントのミスなんてしないんでしょうか?
ネタじゃなくてホントに。


454:デフォルトの名無しさん
08/01/26 03:26:47
>453
俺は他の言語の出身だが、他でもインデントはキッチリ書くよ。
経験上、そうでないと自分がミスリードするし
インデントをキッチリ書くことは「当たり前のことを当たり前にやってるだけ」と思ってる。

欠点としては、自動整形が効かないってことかな。
場合によってはこれだけが痛い。

455:453
08/01/26 04:14:51
私も普段からインデントはキッチリ書く、
というか書いてないと気がすまないのですが
コードを移動したり、差分をマージする時にドキドキしてしまいます。
マージとか他の言語だと、
ひとまずペーストしてインデント揃えて、ってできるんですが
Python だとペースト~揃える間を一息でやらないと怖くて緊張します。


456:デフォルトの名無しさん
08/01/26 11:29:03
まずアペンドしてからちまちま直せば良いんじゃないだろうか

% cat code01.py >> code00.py
% vi code00.py

457:デフォルトの名無しさん
08/01/27 13:40:14
#{

#}

というインデントのヒントをコードに埋め込めばいいんだよ。
なんという逆転の発想・・・

458:デフォルトの名無しさん
08/01/28 16:35:23
pass でブロック終端を表すのはかったるいとおもったけど、
...(Ellipsis)なら、それほど悪くないかなと思った・・・

459:デフォルトの名無しさん
08/01/28 22:43:30
> pass でブロック終端を表す
そんなことしたっけ?

もしかして、空ブロックの代わりにpassって書くのと勘違いしてる?

460:デフォルトの名無しさん
08/01/28 23:22:31
目印としてってことじゃねーの

461:デフォルトの名無しさん
08/01/29 00:10:41
emacs だと pass の行の次はインデントが強制的に1つ引っ込むんだよ
他のエディタはどうなってるか知らんが

462:デフォルトの名無しさん
08/01/29 06:10:34
それはEmacs特有のサービス(?)だと思うぞ

463:デフォルトの名無しさん
08/01/29 08:46:39
マクロがあればどんなエディタでもできそうな気がする

464:デフォルトの名無しさん
08/01/29 16:19:17
面白い仕掛けだね、pass でインデント終了って

465:デフォルトの名無しさん
08/01/30 03:26:02
do - end
: - pass
文字数は変わらないね

466:デフォルトの名無しさん
08/01/30 03:48:01
pass って書くなら、4回バックスペース押したほうがいいと思う。

つうか、ブロック毎にいちいち pass pass 書いてる python コードなんて
誰も読む気しない

467:デフォルトの名無しさん
08/01/30 07:49:50
passなんて空ブロック以外で見たことないぜ

468:デフォルトの名無しさん
08/01/30 09:47:35
>>467
>>461

設定次第でバックスペースは1回にできそうだな

469:デフォルトの名無しさん
08/01/30 09:54:52
pass じゃなくて1って書けば?

470:デフォルトの名無しさん
08/01/30 15:17:47
>>466
そうじゃなくて、自動整形するためのtipsの話じゃなかったのか?

471:デフォルトの名無しさん
08/01/30 17:50:00
個人的な感想だけど、自動整形なんてほとんど使う機会がないな。
そもそも他のソースからのコピペをする機会が少ない。その必要があるときも
ブロックを指定してインデントなりデデント(IDLE なら Ctrl-[ と Ctrl-])すれば一瞬で済むし。
ぶっちゃけ、453さんみたいに苦痛を感じる人がいるのが不思議。

経験的に言って、Python のコーディングをきちんとサポートしてくれるツールを使えば
インデントに起因する問題は何も起こらないよ。あとは慣れの問題。

472:471
08/01/30 17:55:50
ふと、インデントに過剰反応する人は考えすぎなのかなーとオモタ。

Python のインデントって自転車みたい。
乗れないうちはバランスとか転んだら痛いとかいろいろ考えちゃうけど、それって無駄。
乗れるようになったら意識しなくても快適に乗りこなせるようになる。

473:デフォルトの名無しさん
08/01/30 18:01:49
いや、だから、
いきなり }<改行> を入力すれば、勝手にインデントを1段戻した位置にズレて
次の行ではそのまま書き続けられる位置にカーソルが移るような環境に生きていると、
いちいちインデントを調整しながらコードを書くことが苦痛だと。

そういうことじゃないかと思うわけだけど。

書くコードの種類にもよるとは思うけど。

474:デフォルトの名無しさん
08/01/30 18:14:51
ブレースだろうがインデントだろうがブロックの把握は行わなきゃいけないものだと思うんだが

475:デフォルトの名無しさん
08/01/30 19:43:40
} 入れるのと Backspace 押すのとじゃ手間に大差ない気がするが

476:デフォルトの名無しさん
08/01/30 19:52:09
勝手に動かされるのキライ

477:デフォルトの名無しさん
08/01/30 20:41:12
他人のソース見るときが一番不安

478:471
08/01/30 21:23:09
>>473
> 勝手にインデントを1段戻した位置にズレて 
> 次の行ではそのまま書き続けられる位置にカーソルが移るような環境

すくなくとも IDLE や Emacs の Python モードはそういう環境だよ。
if foo is True: [Enter]
で1段インデントされるし
    return [Enter]
で1段デデントされる。return, break, continue, pass 等で終わらないブロックの場合は
Backspace の入力が必要だけど、475さんの言うとおり、C 等で } の入力が必要なのと同じ。

そういえば Emacs の C モードで複数行にわたるマクロを書いてて行末の \ が
あるのとないのとで自動インデントの振舞いが変わって難儀するのを思い出した。
あとで \ をつけてそろえようと思ってても、自動インデントで思わぬ位置までカーソルが飛んでいく。
まあ善し悪しだね。万能じゃない。

479:デフォルトの名無しさん
08/01/30 22:18:18
インデントでブロックをあらわすと、最小コストで構造を表現できる。
記号でブロックをあらわすと、プログラマの意図の通りの構造になっているか
ダブルチェックすることができる。

480:デフォルトの名無しさん
08/01/30 22:23:52
記号でブロックをあらわすと、
見た目と意図が激しく乖離するものが出来上がる現実

481:デフォルトの名無しさん
08/01/30 23:32:28
なんで?

482:デフォルトの名無しさん
08/01/31 18:50:03
>480 は初心者にコード書かせた場合の話だろうな。
確かに、ブロックを正しく書く癖を付けさせるなら、こういう言語かも知れない。

483:デフォルトの名無しさん
08/01/31 20:48:36
インデントブロック無しで書きたいときもあるのだ。たとえば
if (hoge) break;
とか。

switch (var) {
  case A: hoge(); break;
  case B: huge(); break;
  case C: huga(); break;
}
とか。

484:デフォルトの名無しさん
08/01/31 23:22:16
if hoge: break

ってあるよ

485:デフォルトの名無しさん
08/02/01 00:42:51
Python に switch はない。
if var==A:
 hoge1()
else if var==B:
 hoge2()
else if var==C:
 hoge3()

もし A,B,C が 0, 1, 2 というふうに序数になっているなら
(hoge1, hoge2, hoge3)[var]()
だな

486:デフォルトの名無しさん
08/02/01 00:43:53
pythonのインデント構造って、エディタからインタプリタにコードをカットアンド
ペーストするとき、すごくやりにくいよね。
前に、プレゼンのビデオでデモをやってる人がいて、
先頭にスペースが入っちゃったりして、やりにくそうだった。
また、インデントの深いところの複数行をまとめてコピーするのは不可能だよね。

487:デフォルトの名無しさん
08/02/01 01:24:58
先頭に、if 1:
とか入れれば、好きな深さのコード実行できる

>>> if 1:
...           print 1
...           print 2
...           print 4
...
1
2
4

488:デフォルトの名無しさん
08/02/01 06:41:17
if var==A:
 hoge1(a+b)
else if var==B:
 hoge2(c-d)
else if var==C:
 hoge3(e/f)

もし A,B,C が 0, 1, 2 というふうに序数になっているなら
(hoge1, hoge2, hoge3)[var]((a+b, c-d, e/f)[var])
ということか

489:デフォルトの名無しさん
08/02/01 06:41:54
副作用ワロスw

490:デフォルトの名無しさん
08/02/01 09:41:51
俺だったらこうかなあ。

    def case_A():
        hoge1(a+b) 
    def case_B():
        hoge2(c-d) 
    def case_C():
        hoge3(e/f)
    f = (case_A, case_B, case_C)[var]
    f()

491:デフォルトの名無しさん
08/02/01 09:54:55
> また、インデントの深いところの複数行をまとめてコピーするのは不可能だよね

それはPythonじゃなくてエディタの機能の話だろ。

492:デフォルトの名無しさん
08/02/01 11:00:13
>> 491
> それはPythonじゃなくてエディタの機能の話だろ。

また、インデントの深いところの複数行をまとめて (エディタからインタプリタに)
コピーするのは不可能だよね、という話?
先頭に空白が入っていると、無理。

493:デフォルトの名無しさん
08/02/01 12:11:32
矩形選択できるエディタで先頭の空白をさければいいんじゃないの?
何を無理とか不可能とか言ってるのかよくわからん。

494:デフォルトの名無しさん
08/02/01 14:25:29
>487 でほとんどの人は困ってないと思うんだよね…

495:デフォルトの名無しさん
08/02/01 14:28:31
そんな石器時代的な方法で我慢しないと駄目なのか。

496:デフォルトの名無しさん
08/02/01 16:53:18
primitive な方法で解決できるのが一番いい

497:デフォルトの名無しさん
08/02/01 16:55:02
ところで、python に else if ってないんだけどさ・・・>>488

498:デフォルトの名無しさん
08/02/01 21:29:48
使ってるエディタによりけりかもな。
なんだかLispみたいだ。

499:デフォルトの名無しさん
08/02/01 21:34:17
>>485
うわあPython読みにくう・・・。

500:デフォルトの名無しさん
08/02/01 23:35:29
なんで行単位で範囲選択できるエディターを使わないんだろう

501:デフォルトの名無しさん
08/02/02 00:53:56
だいたいがだ、インデントに関連したバグで悩まされた経験が
オマエラあるのか。俺は18年のプログラム暦で一度もない。

502:デフォルトの名無しさん
08/02/02 01:01:47
>>501
確かに。俺も 20年位インデント関連のバグ書いて悩んだことはないな。
インデントが見栄えだけしか意味持つ言語使ってないから。

503:デフォルトの名無しさん
08/02/02 01:35:12
アンインデントするときに空行が入っていないソースを
ペーストしようとするとエラーになるんですけど
どうしたらよいのでしょうか?



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch