質素なプログラミング…それは何のために良いのですか?[閉まっている]


8

私たちはプロジェクトでスパルタン プログラミングを使用せざるを得ません。だから私はそれを手に入れました、それはメソッドを本当に短くし、最初に単純なケースを処理します。しかし、難読化されたCコードコンテストのようなコードの価格に本当に価値があるのでしょうか。

何かに役立つと思いますか?


3
「スパルタンプログラミング」とは一体何ですか?私たちの無知な人々にリンクを提供できますか?
DarenW 2010

「プロジェクトでSpartanプログラミングを使用することを強制されています」?!それはどのように機能しますか?つまり、プロジェクトで(エディタ/ VSC / ...)の使用を強制されることを(ある程度)想像できますが、特定のアプローチを強制的に使用するにはどうすればよいですか?
2010

16
これはスパルタです!
ディーンハーディング

2
最終的に、難読化されたコンテストに入力する必要のあるコードができてしまった場合は、ユーフェミズムがあったとしても、それは間違っています。
Tim Post

3
@EpsilonVector:ああ、これは学校のプロジェクトであり、「現実の世界」にあるものではありませんか?それから私はそれを吸い上げて仕事をします。おそらく教授は、教義的な規則を盲目的に遵守することは、通常、効率的に仕事をする能力にとって有害で​​あることを教えようとしているのかもしれません。あるいは、彼はサディスティックなだけかもしれません...私は多くの教授を知っています;-)
ディーンハーディング

回答:


24

Spartanプログラミングの多くのテナントは、私にとっては良い習慣のように思えます。たとえば、メソッドを短くする、変数のスコープを最小化する、メソッドへのパラメーター数を最小化する、クラスへのメソッドを最小化するなど。これらはすべて良いことであり、まさにあなたが目指していることです。

しかし、そこのようなもの文字数を最小限に抑えトークン数を最小限に抑え値化本当に意味をなさないいるなど、(真剣には?)。

私の主な問題は次の引用で例示されていると思います

しかし、質素なプログラミングは単なる技術的なコーディングスタイルではありません。つまり、単一の基礎となる統一の原則-ミニマリズムと極端さを取り入れたシンプルさ-があります。

「極端にとらえられた」何かは私に警報ベルを鳴らします。


誰もが「プログラミング」と言った?:p
CesarGon

三値化は興味深いです。リンクされた論文で引用されている最初のケースでは、それは良い考えです、二番目に...うーん大丈夫です、私はそれを手放しますが、三値化を愚かな極端に(例えば、入れ子になった三元)するのは、まあです、ばかげた。
ocodo

@Slomojo:そのページの本当のWTFは「自動値化」のセクションで...
ディーン・ハーディング

その正規表現はかなり素晴らしいです。あなたが各三値化をレビューする限り、私はそれについて大きな問題はないと思います。彼らがまだ読める限り、彼らは大丈夫です。-あなたが言うように、問題になるのは極端(またはおそらくもっと正確には、過激派)です。
ocodo 2010

+1 for Anything "taken to Extremes"は私に警報ベルを鳴らします。
Sarawut Positwinyu、2011

4

今、それは邪魔に馴染んでいるように見えました。極端なことはしていませんが、トークンの最小化ですらあります。たとえば、ファイル名ではなくfnameを使用します。たとえば、出力にはout、データ入力にはx、カウントにはn、長さにはlなどです。lxはxの長さ、lyはyの長さ、...ドリフトを取得します。

さらに、科学的なアプリケーションで大規模なデータセットを操作することが多いため、Rのインデックス機能をよく使用しています。これらのインデックスをすべて書き出すと、コードが目を痛めます。したがって、インデックスはid、または単にiになります。

さらに、R(適用ファミリー)の特定のループ構造では、適用呼び出し内での関数宣言が必要になることがよくあります。これらの場合、私は常にx、y、z、...を使用します。これらの関数は1行または2行であることが多いため、どこから来ているかが明確であり、画面が乱雑になることはありません。

完全なコードに一貫したいくつかの命名規則があり、コメントを提供して、あいまいな変数名を説明する限り、それは悪いことではありません。結局、画面上をホバリングする長いラクダの群れよりもコードが読みやすくなります。


2
短い変数は、極端に長い変数名よりも読みやすいことが多いことに同意します。私の回答で述べたように、「極端なことは何でも私に警報ベルを鳴らします」、そしてそれは双方向に行きます。最終的な目標は、特定の文字数に関係なく、読みやすさを最大にすることです。
ディーン・ハーディング2010

1
「..コードが読みやすくなります...」「私にとって」を強調しました。コードが他の数十人によって使用および保守されている場合、変数およびロジックは、それらだけでなくそれらにとっても意味のあるものでなければなりませ。それらの場合、あなたの慣習と略語はそれほど明確ではないかもしれません。:-)
CesarGon、

@Cesargon:規約を文書化することです。
Joris Meys 2010

@Dean完全に同意します。しかし、特に特定のプログラミング言語では、他の極端な傾向に気づきました。
ジェイブ

2

スパルタンプログラミングの利点を説明する記事は次のとおりです

http://ssdl-wiki.cs.technion.ac.il/wiki/index.php/SendAnEmail_case_study


3
冗談ですよね?変数名の長さの最小化、変数の数の最小化...まあ、MSX日を思い出させます!
CesarGon

私はそれを承認していません:)しかし、記事はそれを私が説明できるよりもよく説明しています。
Demian Kasier 2010

分かった分かった。
CesarGon

1
記事に示されているこれらのものは、すべてのリファクタリングアクションに属すべきではありませんか?これが「スパルタンプログラミング」と呼ばれていることを知りませんでしたが、コードを書くときは一般にこれらのことを気にします(変数名の長さは別ですが、とにかく記事でその問題を見つけていません)
Felix Dombek

ええ、私はそのリンクに精通していますが、少し前にアクセスしようとしたときにロードされなかったということを除けば... OKなので、チームメンバーが音を出すよりも気が狂っていませんが、このリンクではCaesarGonを使用しています。 ...
EpsilonVector

2

これは、Cのアクセントのコンパクトさです。

  1. 正しさ
  2. 完全
  3. コンパクトさ

コードが正しくない場合、誰もそのコードを気にしません。

コードが完全でない(すべてのケースを処理する)場合は、バグがあります

メモリまたはクロックサイクルを浪費するよりもコンパクトでない場合(コンパイラの最適化は別として)

ここでの順序が最も重要であることに注意してください。最もコンパクトなプログラムが正しいことはほとんどありません。例えば

void main() {
 return 1; 
}

必要に応じて、さらにコンパクトにすることができます。void main(){return 1;}
アーロンフランケ

0

うわー、私は実際にこのようにプログラムしましたが、名前があることを知りませんでした。読みやすさにはメリットがありますが、空間的にはもっと便利です。つまり、読みにくい行がいくつかあっても、コードのスープで迷子になることはありません。

ただし、特定の構造に慣れると、最初よりも短時間で簡単に道を見つけることができると思います。


1
spartznizerプロジェクトの新しいバージョンがここにあります:github.com/SpartanRefactoring/Spartanizer/wiki/Tutorial
Yossi Gil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.