Visual Studio. Tabs vs. Spaces Problematik
-
knivil schrieb:
Auch erkenne ich Leerzeichen am Ende einer Zeile ...
Die sind wirklich am Schlimmsten! Ich hasse es, wenn ich in fremden Code, den ich übernehmen muss, in jeder zweiten Zeile unnötige Spaces am Ende finde. Sind zwar nicht schwer wegzukriegen, aber irgendwie empfinde ich da richtigen Ekel...
-
_matze schrieb:
Die sind wirklich am Schlimmsten! Ich hasse es, wenn ich in fremden Code, den ich übernehmen muss, in jeder zweiten Zeile unnötige Spaces am Ende finde.
wobei stören die dich? mir fällt sowas kaum auf.
-
Tachyon schrieb:
Badestrand schrieb:
Tabs sind nur nervig. Vor allem, wenn nach irgendwelchem Code noch weitere Tabs folgen, die irgendwas ausrichten.
Vielleicht hättest du dir das mal kompletter anschauen müssen..: Da geht es um das Einrückungs-/Ausrichtungs-Handling im Editor, gespeichert wird mit Spaces.
knivil schrieb:
Elastic tabstops
The solution - tabstops that expand or shrink to fit their contentsNaja, das macht jeder normale Editor auch schon mit Spaces.
Echt? Welcher Editor macht das denn?
-
/fricky schrieb:
_matze schrieb:
Die sind wirklich am Schlimmsten! Ich hasse es, wenn ich in fremden Code, den ich übernehmen muss, in jeder zweiten Zeile unnötige Spaces am Ende finde.
wobei stören die dich? mir fällt sowas kaum auf.
Ja, die stören den Arbeitsablauf nicht, schon klar. Trotzdem gehen die irgendwie gegen mein Bewusstsein für sauber geschriebenen Code, keine Ahnung. Stört mich einfach...
-
Hier bei uns werden 4 Spaces zum Einrücken verwendet. Früher hab ich privat 2 Spaces verwendet, nach heutigem Empfinden macht das den Code viel unleserlicher.
Zusätzlich bekommt jeder von SVN eine Fehlermeldung beim Commiten wenn Tabs im Code auftauchen. Zusätzlich werden Umbrüche automatisch in Unix-Umbrüche umgewandelt und Spaces am Zeilenende entfernt.
-
Herrmann schrieb:
Hier bei uns werden 4 Spaces zum Einrücken verwendet. Früher hab ich privat 2 Spaces verwendet, nach heutigem Empfinden macht das den Code viel unleserlicher.
Zusätzlich bekommt jeder von SVN eine Fehlermeldung beim Commiten wenn Tabs im Code auftauchen. Zusätzlich werden Umbrüche automatisch in Unix-Umbrüche umgewandelt und Spaces am Zeilenende entfernt.Je schlechter die Lösung, desto mehr Gewalt braucht man, um sie durchzusetzen.
-
Ich find die Idee nicht schlecht "unsichtbare Fallen" automatisch rauszuschmeissen. Weil es gibt Editoren die zum Beispiel Leerzeichen am Ende der Zeile entfernen, wenn du nun die Dinger aber im Repo hast kriegst du deswegen einen Diff.
-
Also hallo nochmal,
Ich habe nun auch in VS2008 versucht auf Spaces umzustellen und es ist Smart bei "Auto Intend" an, aber wenn ich nun TAB drücke um 4 Spaces einzufügen und danach BACKSPACE um die 4 Spaces wieder rückgängig zu machen, entfernt er trotzdem nur 1 Space
Was muss ich denn noch umstellen? bitte helft mir.
-
Badestrand schrieb:
Echt? Welcher Editor macht das denn?
Es ist vielleicht nicht exakt, das was dort beschrieben ist: Drucke ich Enter, so ist mein Cursor ordentlich eingerueckt.
-
knivil schrieb:
Es ist vielleicht nicht exakt, das was dort beschrieben ist: Drucke ich Enter, so ist mein Cursor ordentlich eingerueckt.
Ok, also eigentlich ganz was anderes... Kleines Beispiel zu den "Elastic Tabs":
int a; string b; Foo c;
Dieses Stückchen oben wird als Tabelle mit drei Zeilen und zwei Spalten aufgefasst. Setze ich den Cursor hinter "Foo" und erweitere es um "Whatever", rückt die komplette rechte Spalte automatisch weiter nach rechts:
int a; string b; FooWhatever c;
-
Badestrand schrieb:
Ok, also eigentlich ganz was anderes... Kleines Beispiel zu den "Elastic Tabs":
Er hat soch so viel Mühe gegeben, klarzustellen, daß es nicht elastic "Tabs" sind, und Du tritts ihn mit Füßen.
-
Badestrand schrieb:
...Da geht es um das Einrückungs-/Ausrichtungs-Handling im Editor, gespeichert wird mit Spaces.
Eben. Es geht aber um Tabs.
-
Also ich weiss nicht, ob es noch mehr Anwendungsbeispiele gibt, aber ... Variablen so auszurichten bzw. Kommentare dahinter sauber anzuordnen empfinde ich als Zeitverschwendung. Automatische Zeitverschwendung kann ich mir nicht leisten.
-
knivil schrieb:
Also ich weiss nicht, ob es noch mehr Anwendungsbeispiele gibt, aber ... Variablen so auszurichten bzw. Kommentare dahinter sauber anzuordnen empfinde ich als Zeitverschwendung. Automatische Zeitverschwendung kann ich mir nicht leisten.
Leisten könnte ich mir's. Aber die Zeitverschwendung ist sogar Codequalitätskontraproduktiv. Die natürliche Lese-Einheit ist die Zeile.
double SA = match->points*.5;
map<string,Site>::iterator i = sites.begin();
// Helau!
-
knivil schrieb:
Also ich weiss nicht, ob es noch mehr Anwendungsbeispiele gibt, aber ... Variablen so auszurichten bzw. Kommentare dahinter sauber anzuordnen empfinde ich als Zeitverschwendung. Automatische Zeitverschwendung kann ich mir nicht leisten.
Als Anwendungsbeispiel würde mir noch einfallen:
int foo( const std::string& whatever, const std::string& foobar, const Whatever& yippie ) {}
Wenn man hier den Funktionsnamen verlängert, kommen die unteren Parameter mit nach rechts (oder nach links beim Verkürzen), finde ich voll praktisch. Aber allzu oft braucht man es wohl wirklich nicht. Was es aber m.M.n. nicht weniger cool macht, wenn der Editor das automatisch übernimmt (ist ja dann keine Zeitverschwendung mehr)
-
volkard schrieb:
Aber die Zeitverschwendung ist sogar Codequalitätskontraproduktiv. Die natürliche Lese-Einheit ist die Zeile.
Kann man sich sicherlich drüber streiten, aber ich finde
int a; string b; FooWhatever c;
übersichtlicher als
int a; string b; FooWhatever c;
, oder auch
... // blablabla ... // blablabla
besser als
........................ // blabalbla .. // blablabla
. Wobei ich
double SA = match->points*.5; map<string,Site>::iterator i = sites.begin();
auch unleserlicher finde als
double SA = match->points*.5; map<string,Site>::iterator i = sites.begin();
. Ist wohl eine Sache des Maßes.
-
Badestrand schrieb:
Kann man sich sicherlich drüber streiten, aber ich finde
int a; string b; FooWhatever c;
übersichtlicher als
int a; string b; FooWhatever c;
Leeres Beispiel. Bei mir stehen nie lokale Variablen einfach roh da, ohne initialisiert zu werden. Und sie heißen auch nicht a b c, sondern haben keine senkrechte Struktur.
Badestrand schrieb:
... // blablabla ... // blablabla
besser als
........................ // blabalbla .. // blablabla
Auch leeres Beispiel. Bei mehr Kommentaren der Art
i++; //i wird um eins erhöht cout<<i<<'\n'; //i wird ausgegeben
ist dieser Version hübsch. Aber Kommentare, die im Code was beschreiben, beschreiben den Zustand an der Codepoasition, wo der Kommentar steht, sollte also auch eingerückt sein.
Hier mal was uraltestemplate<class C> void pop(const C &comparator) { assert(size>0); if(--size) { int p=1,c1,c2; data[0]=data[1]; while(c1=p*2,c2=c1+1,c1<size) { //Wenn der Papa verschwindet, dann muß das kleinere //Kind seinen Platz einnehmen, dessen kleineres //Kind seinen, solange, bis jemand keine Kinder //mehr hat if(comparator.lessThan(data[c2],data[c1])) c1=c2; data[p]=data[c1]; p=c1; }; //Und in die Lücke wird das letzte Element ganz //normal eingefügt. data[p]=data[size]; while(comparator.lessThan(data[p],data[p/2])) { swap(data[p/2],data[p]); p/=2; }; }; };
genauso alt
void receiveARP(Packet &p) { //Arp timeout is a MUST but still not implemented! if(p[ARP_COMMAND]==ARP_COMMAND_REQUEST) {//Das war eine Anfrage if(p[ARP_TARGET_PROTOCOL_ADRESS]==ipAdresse) {//Sie war an mich, also antworte ich //Aber zuerst merke ich mir mal die Daten des Senders, denn //ich soll bestimmt demnächst auch was an ihn schicken. arpCache.add(p[ARP_SOURCE_PROTOCOL_ADRESS],p[ARP_SOURCE_HARDWARE_ADRESS]); //Und jetzt mache ich aus der Anfrage die Antwort p[ARP_TARGET_HARDWARE_ADRESS]=p[ARP_SOURCE_HARDWARE_ADRESS]; p[ARP_TARGET_PROTOCOL_ADRESS]=p[ARP_SOURCE_PROTOCOL_ADRESS]; p[ARP_SOURCE_HARDWARE_ADRESS]=macAdresse; p[ARP_SOURCE_PROTOCOL_ADRESS]=ipAdresse; p[ARP_COMMAND]=ARP_COMMAND_REPLY; linkLayer->send(p,p[ARP_TARGET_HARDWARE_ADRESS],ETHER_TYPE_ARP); } else {//Sie war nicht an mich, also werfe ich das Packet weg delete &p; }; } else {//Das ist eine Antwort assert(p[ARP_COMMAND]==ARP_COMMAND_REPLY); arpCache.add(p[ARP_SOURCE_PROTOCOL_ADRESS],p[ARP_SOURCE_HARDWARE_ADRESS]); delete &p; }; };
Ist wohl eine Sache des Maßes.
Klar. Für mich ist es vermutlich fast durchgehend störend. Andere werden es lieben.
-
volkard schrieb:
Leeres Beispiel. Bei mir stehen nie lokale Variablen einfach roh da, ohne initialisiert zu werden. Und sie heißen auch nicht a b c, sondern haben keine senkrechte Struktur.
Hat ja niemand gesagt, dass es lokale Variablen sind. Und bis der Compiler deiner Wahl das entsprechende 0x-Feature unterstützt, kannst du Klassen-/Struct-Variablen weiterhin nicht bei der Deklaration initialisieren.
@Hinter-Code-Kommentare: Mache ich selbst selten, sehe ich aber öfters mal in Code.
Oh, und du hast das Funktions-Paramter-Umbrechen noch nicht zerrissen, lass dir mal was einfallen.
-
Badestrand schrieb:
Oh, und du hast das Funktions-Paramter-Umbrechen noch nicht zerrissen, lass dir mal was einfallen.
Dieses Tuwort heißt "verreißen" und nicht "zerreißen". SCNR
Bei den Attributen tue ich's nicht, weil ich nicht nur desqwegen damit anfange. Funktions-Paramter-Umbrechen ist bei mir viel zu selten, um maßgeblich für irgendwas zu sein.
-
volkard schrieb:
Dieses Tuwort heißt "verreißen" und nicht "zerreißen". SCNR
Ok, sieht komisch aus, war aber im Sinne von "In der Luft zerreißen" gemeint