Tag: Java

Quellcode Beispiele in zahlreichen Sprachen

09 Mrz

Auf der Seite Rosetta Code werden zahlreiche Code-Beispiele zu verschiedenen Programmiersprachen angeboten. Dabei geht es um die Darstellung ein und derselben Aufgabe in möglichst vielen verschiedenen Programmiersprachen. Dies erlaubt einen direkten Vergleich der Codelänge und der Komplexität der verschiedenen Sprachen.

Derzeit werden fast 200 Sprachen unterstützt, von denen aber nicht alle immer als Beispiel zur Verfügung stehen, diese Sprachen sind in 374 Kategorien von Aufgaben und Problemen angeordnet. Für gängige Probleme gibt es in fast jeder Sprache eine passende Lösung. Vor allem die unterschiedliche Codelänge fällt dabei auf. So benötigt zum Beispiel das Huffman Coding (Kompression) in J lediglich 14 Zeilen, in C aber ganze 174 (inkl. hübscher Formatierung bei beiden Beispielen).

Auf der Webseite gibt es weitere nette Beispiele.

import java.text.MessageFormat;
public class Beer{
   static String bottles(int n){
      return MessageFormat.format("{0,choice,0#No more bottles|1#One bottle|2#{0} bottles} of beer", n);
   }
   public static void main(String[] args){
      String byob = bottles(99);
      for (int x = 99; x > 0;) {
         System.out.println(byob + " on the wall");
         System.out.println(byob);
         System.out.println("Take one down, pass it around");
         byob = bottles(--x);
         System.out.println(byob + " on the wall\n");
      }
   }
}
 

Design Pattern by Gamma und Co.

18 Jan

Jeder gute Programmierer sollte die grundlegenen Design Pattern von Gamma und Co. kennen. Für eine kleine 2-seitige Übersicht ist jetzt mit den Design Pattern Cards gesorgt.

Solche Pattern (Muster) helfen Probleme schnell und sauber zu lösen. Man kann sich damit sicher sein, eine gute Lösung zu nutzen und greift auf die langjährige Erfahrung einer ganzen Community zurück. Also, jeder sollte 5-10 Pattern kennen und auch anwenden können, ihr haltet damit euren Code wesentlich sauberer und besser wartbar!

 

Programmiersprachen für Open Source Projekte

25 Aug

BlackDuck Software, eine Firma die sich hauptsächlich mit OpenSource Projekten beschäftigt, hat jetzt eine Statistik über die dort eingesetzten Programmiersprachen veröffentlicht. Deutlich sieht man den immer noch starken Charakter von C / C++:

Image1

An den Tendenzen sieht man jedoch auch schon den Trend der kommenden Jahre:

1

 

Java Enums: Wie vergleiche ich richtig?

14 Aug

Seit Java 1.5 gibt es die sogenannten Enumerations, kurz Enums. Auf deutsch würde der Datentyp wohl “Aufzählung” heißen. Und genau das ist es auch, eine Aufzählung von Werten, als eigener Datentyp bietet Java hier einige Vorteile. Aber erstmal zur Deklarierung einer solchen Enum:

public enum FruchtkorbEnum {
	APFEL, BANANE, ERDBEERE, MELONE, PFIRSICH
}

Wie man sehen kann kein großer Akt. Man könnte jetzt meinen, dass man Enums mit dem bekannten equals() vergleichen muss. Dies ist ja zum Beispiel für Strings und andere Objekte pflicht. Also etwa so:

public class FruchtKorbTest {
 
	public static void main(String[] args) {
 
		FruchtkorbEnum meinEinkauf = getEinkauf();
 
		if (meinEinkauf.equals(FruchtkorbEnum.APFEL)) {
			System.out.println("Ein Apfel wurde gekauft...");
		} else if (meinEinkauf.equals(FruchtkorbEnum.BANANE)) {
			System.out.println("...");
		}
 
	}
 
	private static FruchtkorbEnum getEinkauf() {
		// Mache etwas kluges ;)
		return null;
	}
 
}

Wer aufgepasst hat wird merken, dass obiger Code natürlich eine Nullpointer-Exception werfen wird. Um dies zu verhindern kann man einerseits die Konstante nach vorne stellen oder aber “==” verwenden, denn der Enum-Typ gilt in Java als primitiver Datentyp. Das heißt ein Vergleich via “==” ist zulässig und auch ein guter Stil. Denn damit bekommt man zwei Vorteile auf einen Schlag:

  1. Geschwindigkeit: “==” ist schneller als equals()
  2. Null-Safe: Es können keine Nullpointer-Exceptions mehr auftreten

Der Code sähe dann so aus:

public class FruchtKorbTest {
 
	public static void main(String[] args) {
 
		FruchtkorbEnum meinEinkauf = getEinkauf();
 
		if (meinEinkauf == FruchtkorbEnum.APFEL) {
			System.out.println("Ein Apfel wurde gekauft...");
		} else if (meinEinkauf == FruchtkorbEnum.BANANE) {
			System.out.println("...");
		} else if (FruchtkorbEnum.PFIRSICH.equals(meinEinkauf)) {
			// Beispiel mit Konstante vorne...
			System.out.println("...");
		}
 
	}
 
	private static FruchtkorbEnum getEinkauf() {
		// Mache etwas kluges ;)
		return null;
	}
 
}

Hinweis: Wer die Konstante, also zum Beispiel FruchtkorbEnum.APFEL nach vorne stellt und dann equals() aufruft (letztes if im obigen Code), macht nichts falsch, verschenkt jedoch den Geschwindigkeitsvorteil, auch wenn equals() an der Enum-Klasse überschrieben wurde und selber ein Vergleich via “==” ausführt, es kostet immerhin einen Methodenaufruf mehr ;).

 

2. Java Trendbarometer erschienen

12 Aug

Vor kurzem hat expeso das 2. Java Trendbarometer veröffentlicht, nachdem im Dezember 2008 das erste Trendbarometer veröffentlicht wurde, soll nun halbjährlich ein Bericht folgen. Für jeden Java-Entwickler ist ein Blick ins PDF Pflicht ;).

Inhalt

  1. Das Java-Trendbarometer
  2. Die Java-Experten
  3. Verwendung der Java-Technologien
  4. Software-Entwicklungswerkzeuge
  5. Technologien und Frameworks
  6. Aktuelle Themen
  7. Open Source
  8. Software-Entwicklungsprozess
  9. Innovation und Weiterbildung
  10. Fazit

Zusammenfassung 2. Java-Trendbarometer (2009)

Das Java-Trendbarometer zeigt systematisch die Verbreitung von Technologien, Frameworks und Open Source Produkten. Erstaunliche Ergebnisse ergaben sich beim Software-Entwicklungsprozess (Kapitel 8). Hier deuten sich durchgehend schlechtere Ergebnisse gegenüber unserer letzten Studie an.
So stellt sich die Frage: Sparen die Unternehmen in der aktuellen wirtschaftlichen Situation bei den „üblichen Verdächtigen“ Qualität und Dokumentation? In diesem Fall wäre das hoch riskant und wird sich früher oder später rächen; denn der größere und kostenintensivere Teil im Lebenszyklus einer Unternehmens-Software liegt in der Phase der Wartung und Weiterentwicklung. Den Hintergrund dieser Entwicklung kennen wir nicht, werden aber bei zukünftigen Studien die weitere Entwicklung beobachten.

Image1