[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 21:04 / Filesize : 136 KB / Number-of Response : 655
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonに見られるインデントによる制御構造の是非



1 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 22:44:02 ]
議論よろしく。

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

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

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

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

15 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 21:58:16 ]
好きだが、diffフレンドリーでないのが困る。

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

>11

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


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

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

18 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:16:18 ]
en.wikipedia.org/wiki/Off-side_rule

思ったより数少ないね。

19 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 04:59:32 ]
pythonもどきのBoo言語てのもある

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




21 名前:デフォルトの名無しさん [2007/03/04(日) 21:34:51 ]
悔い改めよ

22 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:09:27 ]
アーメン

23 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:16:35 ]
GNUのキモイインデントが見られないというデメリットがあります

24 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 01:09:34 ]
ンギモヂイイ!に見えた

25 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 14:25:34 ]
何のエロマンガだよ。

26 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 15:56:37 ]
東北人?

27 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 06:02:44 ]
これって普通のコンパイラコンパイラツールで出来るの?

28 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 14:39:52 ]
これってどれ?

29 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:10:02 ]
Pythonに見られるインデントによる制御構造

30 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 14:57:54 ]
LL(1)



31 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 23:15:23 ]
是。

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

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

34 名前:デフォルトの名無しさん [2007/07/18(水) 08:26:12 ]
>>32
慣れの問題かもしれん

35 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 08:40:10 ]


36 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:31:08 ]


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

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

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

39 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:27:08 ]
> ブレースの方が視認性よくね

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

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



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

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

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

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

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

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

47 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 06:57:29 ]
"<"涙目。

48 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:00:38 ]
皮肉が通じんのか…

49 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:59:36 ]
なぜ矩形選択なのかと

50 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 14:22:18 ]
>>41
python-modeってそんなに不便なの?!



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

52 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:15:52 ]
Lisp は紙と鉛筆がデフォルトだよ

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

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

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

55 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:47:47 ]
アホ過ぎる……

56 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:49:31 ]
話題がループし始めたな

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

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

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

59 名前:58 mailto:sage [2007/07/21(土) 01:03:55 ]
って…C-M-qは字下げだったかorz
普段Emacs使わないから覚えてないな…

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



61 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 05:25:39 ]
>>60
具体例きぼんぬ

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

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

64 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 18:17:49 ]
Python知らないが、こういうことだろ?

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

65 名前:なんでこんな奴が来てるんだ? mailto:sage [2007/07/21(土) 21:59:01 ]
>インデントレベルの把握と操作が煩わしい。

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

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

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

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

69 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 09:39:23 ]
>手作業でインデント揃え

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

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

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

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



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


{
{
{
なんとか
}
}
}

をコマンド一発で

{
 {
  {
   なんとか
  }
 }
}

にしてくれる事

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

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

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

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

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

75 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 14:50:48 ]
>>74
>>53


76 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 22:08:38 ]
1:1 でマップ出来ないというのはその通りだよね。
この場合は、一部を切り出して比較しても意味が無い。

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

79 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 00:23:14 ]
おお、気づかなかったよ

80 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 00:45:46 ]
>>78
それは・・・・・・



81 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 01:03:47 ]
それじゃあ、rubyのendのほうがマシw

82 名前:デフォルトの名無しさん [2007/10/11(木) 11:14:00 ]
キモイ

83 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:24:36 ]
HASKELL !!!!!!

85 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 20:35:40 ]
>>85
何をお仰りたいかわかりませんが
つ{}
もしくは
つ他言語

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

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

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

89 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 07:56:43 ]
最悪ソース見ればちゃんと残ってる

90 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:13:43 ]
wxGladeが吐いたコードみてみたら

if hoge :
  hage
  fuga
  hige
  # end if

みたいになってた





91 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:15:10 ]
>>83
パンチカードの時代に作られた言語だから


92 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:58:11 ]
そんなもんいちいちつけてコードを醜くするなら別の言語を使え、
とか言い放つPython原理主義者などはいないものか。

94 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 02:19:32 ]
>93

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

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


96 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 09:12:22 ]
残念なことに構文エラーだ

97 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:24:01 ]
>>85
>>78

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

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

99 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:18:51 ]
不要なselfもなくしてください

100 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 01:11:44 ]
変な記号をつけるよりselfの方がまし
selfは不要じゃないよ



101 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 02:11:57 ]
つうか、その話とインデントはまったく独立なわけで・・・

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

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

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


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


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

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

ttp://www.python.org/dev/peps/pep-0008/

たとえばこんなの。

Imports should be grouped in the following order:

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

108 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:30:54 ]
インタプリタの判断ミス(笑)

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

109 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 13:33:41 ]
ブレースミスったときの対策も必要だ!

110 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:03:16 ]
括弧の閉じ忘れ対策も必要じゃね?



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


112 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:04:53 ]
コロン無いと一行に書けないじゃん
if pred: body
みたいにさ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef