Variablenbenennungen / Coding Conventions

Status
Nicht offen für weitere Antworten.

kirdie

Bekanntes Mitglied
Ich habe da eine Frage über die Coding Conventions von Variablen.

Was ist besser:
Java:
String fileName;
oder
Java:
String filename;

Motivation:
Eigentlich soll man ja jedes Wort groß schreiben, z.B. BufferedWriter und so. "filename" ist allerdings ein zusammengesetztes Wort, was macht man damit? Irgendwie kommt es mir komisch vor, das "name" groß zu schreiben. Streng genommen ist BufferedWriter natürlich auch ein zusammengesetztes Wort aber eben kein "richtiges", da es im normalen Sprachgebrauch nicht als ein Wort vorkommt und im englischen wohl sonst auseinander geschrieben werden würde. Was meint ihr dazu?

Weiterhin habe ich eine Datei, in der Wikipediaartikelnamen und deren Titel drin stehen.
Momentan nenne ich:
Den Dateinamen -
Java:
String fnTitleIn;
Den BufferedReader -
Java:
BufferedReader inTitle;
Die Zeile, die ich daraus auslese -
Java:
String lineTitle;
Das Ergebnis von split() darauf -
Java:
String[] titleTokens;
Das erste Element der Tokens -
Java:
String nameFromTitleFile;
(es gibt nämlich auch einen Namen aus einer anderen Datei, ist mir allerdings zu lang)
Das zweite Element der Tokens -
Java:
String title;
Die modifizierte Zeile, die dann abgespeichert wird -
Java:
String newLineTitle;
(klingt auch blöd)

Das kommt mir allerdings reichlich verworren vor. Was besseres fällt mir allerdings auch nicht ein. Kann mir da jemand helfen?

Meine einzige Idee bis jetzt:
- feste Reihenfolge für die Schlüsselwörter, also z.B. fn - in - line - token - name - title
Das wäre dann für:
Den Dateinamen - fnInTitle
Den BufferedReader - inTitle
Die Zeile, die ich daraus auslese - lineTitle
Das Ergebnis von split() darauf - tokensTitle
Das erste Element der Tokens - ??? (nameFromTitleFile ist es bis jetzt, nameTitle suggeriert aber den Namen des Titels)
Das zweite Element der Tokens - title
Die modifizierte Zeile, die dann abgespeichert wird - newLineTitle

P.S.: Ich weiss, das Programm läuft auch so. Ich hätte es aber gerne "perfekt".
P.P.S.: In der Datei ist in jeder Zeile ein Titel drin. Also sind es ja mehrere in der Datei. Wäre es dann besser, von "titles" zu sprechen anstatt von "title" (also z.B: fnInTitles)?
 
M

maki

Gast
[c]filename[/c] ist wegen der von dir genannten Gründe ok.

Das hier:
Java:
String fnTitleIn;
geht imho gar nicht, verstöst gegen die Java Code Konventionen.

Wofür soll denn [c]in[/c] stehen???

Wenn man die Variablen im Kontext sieht kann man besser antworten, denn genauso werden es die Leser deines Codes auch sehen ;)
 

kirdie

Bekanntes Mitglied
[c]filename[/c] ist wegen der von dir genannten Gründe ok.

Das hier:
Java:
String fnTitleIn;
geht imho gar nicht, verstöst gegen die Java Code Konventionen.

Wofür soll denn [c]in[/c] stehen???

Wenn man die Variablen im Kontext sieht kann man besser antworten, denn genauso werden es die Leser deines Codes auch sehen ;)

1. Super, dann kann ich ab jetzt mit gutem Gewissen "filename" schreiben. :)
2. Dann ist filenameTitleIn besser? Oder inputTitleFilename? Oder titleInputFilename?
Das "in" steht für "input". Meine Reader und InputStreams nenne ich meist "in" und meine Writer und Outputstreams "out", wenn ich nur je einen davon im Block habe.
3. Hm da hast du recht. Ich poste und erkläre mal die Prozedur.

Es geht dabei darum, dass ich wissen möchte, welche Artikel bei Wikipedia Wörter beschreiben, die groß geschrieben werden (Eigennamen) und welche nicht.
Dafür benutze ich zwei Dateien als Input:

1. In der Titeldatei stehen die Artikel und ihre Titel

Beispiel
Java:
Artikel	Titel
Berlin	Berlin
Big_band	Big band
Elephant	Elephant

Der BufferedReader dazu heißt momentan "inTitle".
Die Datei ist alphabetisch sortiert (case insensitiv aber alle Einträge sind sowieso groß geschrieben). Die Einträge sind durch Tabulatoren getrennt, links ist der Artikelname und rechts der Titel. In der ersten Zeile steht nicht wirklich "artikel titel" das ist nur hier zur Übersicht halber eingefügt.

2. In der Abstractdatei stehen die Artikelnamen und ihre Abstracts (Kurzbeschreibungen, also die ersten paar Zeilen).

Beispiel
Java:
Artikel	Abstract
Berlin	Berlin is the capital city and one of sixteen states of Germany. With a population of 3.4 million within its city limits, Berlin is the countrys largest city.[...]
Big_band	A big band is a type of musical ensemble associated with playing jazz music and which became popular during the Swing Era from the early 1930s until the late 1940s.[...]
Elephant	Elephants are large land mammals of the order Proboscidea and the family Elephantidae. There are three living species: the African Bush Elephant, the African Forest Elephant and the Asian Elephant (also known as the Indian Elephant).[...]

Die Datei ist auch sortiert, auch mit Tabulator getrennt.

So, die Funktion geht jetzt beide Dateien von oben nach unten durch, findet sie eine Übereinstimmung, dann wird im Abstract nach Vorkommen vom Titel gesucht. Die gültigen Vorkommen (am Anfang der Zeile zählt z.B. nicht da man da immer groß schreibt) werden dann getestet, ob mehr von ihnen groß, oder klein geschrieben werden. Sind die klein geschriebenen in der Mehrheit, wird die Zeile der Titeldatei geändert und in die Ausgabedatei geschrieben, ansonsten wird die Zeile so wie sie ist geschrieben.

Java:
public static void setCaseFromAbstract(String fnTitleIn,String fnTitleOut,String fnAbstract) throws IOException
	{
		BufferedReader inTitle = new BufferedReader(new FileReader(fnTitleIn));
		BufferedReader inAbstract = new BufferedReader(new FileReader(fnAbstract));
		PrintWriter out = new PrintWriter(new File(fnTitleOut));
		//RandomAccessFile abstracts = new RandomAccessFile("","r");
		String lineTitle = inTitle.readLine();
		String lineAbstract = inAbstract.readLine();
		int count = 0;
		int foundCount=0;
		int replacementCount=0;

		while(lineTitle!=null&&lineAbstract!=null)
		{
			count++;
			String[] titleTokens	= lineTitle.split("\t");
			if(titleTokens.length!=2) // skip invalid line
			{
				lineTitle = inTitle.readLine(); 
				continue;
			}
			String[] abstractTokens = lineAbstract.split("\t");
			if(abstractTokens.length!=2) // skip invalid line
			{
				lineAbstract = inAbstract.readLine(); 
				continue;
			}

			String nameFromTitleFile	= titleTokens[0];
			String nameFromAbstractFile	= abstractTokens[0];
			String title	= titleTokens[1];
			
			String theAbstract = abstractTokens[1];

			int compareResult = nameFromTitleFile.compareToIgnoreCase(nameFromAbstractFile);
			if(compareResult<0) compareResult = -1;
			if(compareResult>0) compareResult = 1;

			switch(compareResult)
			{
			case 0: // success, replace if needed and read new lines in both files
			{
				foundCount++;
				String newLineTitle = lineTitle;
				if(!isUpperCase(nameFromAbstractFile, theAbstract))
				{
					replacementCount++;
					newLineTitle = 
						nameFromTitleFile+"\t"
						+title.substring(0, 1).toLowerCase()
						+title.substring(1);
				}
				out.println(newLineTitle);
				lineTitle = inTitle.readLine();
				lineAbstract = inAbstract.readLine();				
				break;
			}
			case -1: // print and skip title line 
			{
				out.println(lineTitle);
				lineTitle = inTitle.readLine();
				break;
			}
			case 1: // skip abstract line
			{
				lineAbstract = inAbstract.readLine();
				break;
			}
			}
			if(foundCount%100000==0) System.out.println(foundCount/1000+"k entries processed.");
		}
		System.out.println("Iterations: "+count);
		System.out.println("Found: "	+foundCount);
		System.out.println("Replaced: "	+replacementCount);
		inTitle.close();
		inAbstract.close();
		out.close();
	}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben