コードスタイル、簡潔さ、競争上の優位性

新しい仕事(C ++)では、通常のコードスタイルを変更する必要がありました。山かっこを開く{ブロックのif / forなどの先頭と同じ行に置く必要がありました。 最初は古い習慣を捨てることは不快でしたが、1週間で新しいアプローチが気に入りました。 それから私は考えた-それらがまだ珍しいように見えるという事実にもかかわらず変更する必要があるスタイルの他の側面があるとしたらどうだろうか? そして、ほとんどのプログラマーは慣性によってそれらを使用しないという事実にもかかわらず。 それがわかった。 数か月間、スタイルを大幅に修正しましたが、結果は低くなりました。



重要なお知らせ

少なくとも1週間は、スタイルのあらゆる側面の変更に慣れるのに適しています。 変化が小さい場合、脳が再訓練しやすくなり、古いコードとの類推が簡単に見つかります。 そして、すべての変更を一度に適用すると、コードが非常に異常になり、脳が過負荷になり、急激な変更を嫌うようになります。



正当化

「より美しいもの」ではありません。 脳は、以下で説明するスタイルにも等しく慣れますが、コードが短い場合、1つの画面に収まるサイズが多くなります。 コードをスクロールする必要が少なくなります。つまり、キーボードからマウスに手を移動したり、カーソルで前後に移動したりする頻度が少なくなります。 アクティビティをスクロールサブルーチンに切り替える必要はありません(スクロールの量は十分ですか、それとも必要ですか?)。 (プログラマーはぞっとする必要があります-すべてのチャレンジに1秒かかります!ロボットとどのように競争しますか?)。 タイピングが少ない。 短いプログラムはより高速にコンパイルされ(特に、1つのディスククラスターの占有が少ない場合)、バージョン管理システムなどで見やすくなります。



縦寸法



新機能とパディング

異なる関数の間には通常、空の文字列を入れます。 しかし、脳にとっては、これは潜在的に冗長な情報です。新しい関数の前に閉じ山かっこで囲まれた行が存在する前に、それは空と見なすことができます。 そして、この閉じ括弧には余分なパディングはありません。 新しいブロック(関数)も追加のインデントなしで提供されます。 合計すると、これは脳が再訓練後、余分な空白行なしで完全にナビゲートするのに十分です。

//++ 
	return 1;
}

int f() {
	return 0;
}

      
      





//++   
	return 1;
}
int f() {
	return 0;
}

      
      





//Python 
	return 1

def f():
	return 0


      
      



//Python   
	return 1
def f():
	return 0

      
      





— , . , - — , } ( — ). . , !

: \}\n\n -> \}\n.

. , . , — !






/* 

*/
/*  
 */

      
      





, . ( */) , . , , , */ . , , . , . //.

, .



Include guard

++ pragma once, include guard ifndef/define/endif . , 2-4 ( ), ( guard). , pragma once, , . , ( ) pragma once, . , // # pragma once.

, . :


\#pragma once\n\n -> \#pragma once\n
\n\n\#pragma once -> \n\#pragma once

      
      









— . . ( ) .

// 
int f()
{
	return 0;
}
      
      





//    ...
int f() {

	return 0;
}
      
      





//
int f() {
	return 0;
}
      
      







, : ? ? if ? - ? ? ?

: {\n\n -> {\n

, .



#include

#include ( ) , ( pragma once). include forward declarations, — , ( java-, include forward declarations). Forward declarations #include #. include/forward declarations — forward declarations, , , .





, . , , .


//file.cpp by AuthorName
//This file is licensed under GPL, www.gnu.org/copyleft/gpl.html

      
      







.





, public/private , — .

//
void f() {
	int ret = 0;
LabelBegin:
	...
	goto LabelBegin;
};
      
      



//
class A {
public:
	A();
	~A() {}
};
      
      



//
class A {
	public:
		A();
		~A() {}
};
      
      





? — , (« ?») — «public:» , (« ? ...»). ? , goto: «public:» goto, , . , , . - ( ). , 320*240, , goto.

: , ? , . . .





. , — « - ? ».





:

VeryLongClassName* veryLongClassName = new VeryLongClassName(params);
      
      





:

auto veryLongClassName = new VeryLongClassName(params);
      
      





:

New<VeryLongClassName> shortName(params);
      
      





, New ( ).

New.h

template<class Class>
class New {
	private:
		Class*d;
	public:
		New() {
			d = new Class();
		}
		template<typename T0>
		New(T0 t0) {
			d = new Class(t0);
		}
		template<typename T0, typename T1>
		New(T0 t0, T1 t1) {
			d = new Class(t0, t1);
		}
		template<typename T0, typename T1, typename T2>
		New(T0 t0, T1 t1, T2 t2) {
			d = new Class(t0, t1, t2);
		}
		template<typename T0, typename T1, typename T2, typename T3>
		New(T0 t0, T1 t1, T2 t2, T3 t3) {
			d = new Class(t0, t1, t2, t3);
		}
		virtual ~New() {}
		Class* operator->() { return d; }
		const Class* operator->()const { return d; }
		operator Class* () { return d; }
		operator const Class* ()const { return d; }
};

      
      





, , , . — ++11 VS2012.





Java/Qt: ClassName, functionName. : function_name — , , , ( ), . « » ( ) , ( ).



Tabs

, ! habrahabr.ru/post/118208





, :

//
Ctor::Ctor(): var1(1)
	, var2(2)
	, var3(3)
...
};
      
      



//
Ctor::Ctor(): var1(1),
	var2(2),
	var3(3)
...
};
      
      





, . ? , 1) — , , , , 2) , . 1 — , , — . : , , , , . , , — . : « , ! , ! ! , — , ? — ! , — ? , — ! , , ? , ! , !». , .





- , ( ). ++ — , ( linq C#). , !



All Articles