Hey,
ich habe in der Uni gelernt, dass es wichtiger ist, sauberen und klar lesbaren
Quellcode zu schreiben, auch wenn es effizienter gehen könnte.
(Ausnahme irgendwelche krassen Algorithmen natürlich)
Das finde ich eig. auch ganz gut.
Ich bin jetzt seit 1 Monat Werkstudent und arbeite an einer Web-App mit.
Heute hat sich mein Chef den von mir geschrieben Code angesehen, und ihn
komplett umgeschrieben. Was er da gemacht hat war meiner Meinung nach nich so geil.
Das Ding ist, dass ich mir bestimmte Referenzen in einer Methode geholt habe,
weil ich einige verwenden musste. Insgesamt hab ich HTML Code aus Informationen
einer Klasse generiert.
Sinngemäss sowas:
Er hat mir jetzt gesagt, dass ich die lokalen Strings nicht erstellen soll, weil sie
Speicher fressen. Ich solle also den html String so erstellen:
Das ist jetzt vllt schwer auf die Situation zu übertragen, zumindest war es so dass
das ganze ein ellenlanger total unübersichtlicher String war.
Am meisten konnte ich folgendes nicht nachvollziehen:
Statt meiner Variante - Logik von der HTML-Generierung zu trennen - :
hat er folgendes gemacht:
Seine Begründung wieder: "Du sparst dir den lokalen String imgPath".
So also ich hab mit ihm drüber geredet und langer Rede kurzer Sinn:
Er meinte er will keine unnötigen Objekte erstellen, weil Strings sehr teuer sind.
Das glaub ich ja, hab ich auch oft gehört. Okay, also erstell ich keine lokalen Strings mehr,
obwohl das ja eig. auch nur Referenzen speichert, meinte er dass da eine String-Tabelle
durchsucht wird ob es den schon gibt, und das kostet Zeit.
Er sagte einfach Strings sind eine Ausnahme weil sie wie Primitive behandelt werden.
Also gut, damit kann ich leben.
Aber nichmal Referenzen auf "echte Objekte" darf ich machen:
..sondern soll bei jedem Aufruf über Something().getContent().getNews() gehen.
Weil's die Referenz ja schon gibt.
Aber mein news-Objekt ist ja nicht "new", also auch nur eine Referenz = 4 Byte?
Also ich weiss nicht. Türlich ist er sicherlich besser als ich im Programmieren, aber ich wollte
einfach hier mal nachfragen.
Ist das echt so krass, dass man das so macht? Keinerlei lokale Hilfs-Variablen usw
erstellen, sondern lieber ellenlange unübersichtliche Code-Zeilen haben, nur weil man damit
ein paar Byte im Speicher oder Rechenzeit spart?
Der komplette Code den er schreibt sieht so aus, für mich total unübersichtlich.
Ist einfach das komplette Gegenteil von der Art, wie ich eig. code:
Sobald ich an einer Stelle mehr als einmal eine Info von aussen brauch, speicher
ich mir die lokal in einer Referenz ab, und nutz dann diese, statt jedesmal wieder
die Methoden von aussen aufzurufen.
Wie is das so bei euch "anderen"? Könnt ihr das bestätigen oder nicht?
Danke
PS: Wie kann ich eig. testen um wieviel Speicherplatz mehr lokale
Referenzen brauchen?
Ich hab über Runtime.getRuntime().totalMemory() gelesen aber das bringt mir
irgendwie immer den gleichen Wert, total egal was für Objekte oder so ich erstelle...
PPS: Ich hab grad ein Test String vs StringBuilder gemacht. Ist StringBuilder nur
schneller oder braucht er auch weniger Speicher?
ich habe in der Uni gelernt, dass es wichtiger ist, sauberen und klar lesbaren
Quellcode zu schreiben, auch wenn es effizienter gehen könnte.
(Ausnahme irgendwelche krassen Algorithmen natürlich)
Das finde ich eig. auch ganz gut.
Ich bin jetzt seit 1 Monat Werkstudent und arbeite an einer Web-App mit.
Heute hat sich mein Chef den von mir geschrieben Code angesehen, und ihn
komplett umgeschrieben. Was er da gemacht hat war meiner Meinung nach nich so geil.
Das Ding ist, dass ich mir bestimmte Referenzen in einer Methode geholt habe,
weil ich einige verwenden musste. Insgesamt hab ich HTML Code aus Informationen
einer Klasse generiert.
Sinngemäss sowas:
Code:
News news = Something().getContent().getNews();
String title = news.getTitle();
String whatever = news.getWhatever();
stringBuilder.append( "<span>" + title + "someotherhtmltags etc" + whatever +" usw");
Er hat mir jetzt gesagt, dass ich die lokalen Strings nicht erstellen soll, weil sie
Speicher fressen. Ich solle also den html String so erstellen:
Code:
stringBuilder.append( "<span>" + Something().getContent().getNews().getTitle() + "someotherhtmltags etc" + Something().getContent().getNews().getWhatever()+" usw");
Das ist jetzt vllt schwer auf die Situation zu übertragen, zumindest war es so dass
das ganze ein ellenlanger total unübersichtlicher String war.
Am meisten konnte ich folgendes nicht nachvollziehen:
Statt meiner Variante - Logik von der HTML-Generierung zu trennen - :
Code:
News news = Something().getContent().getNews();
String title = news.getTitle();
String whatever = news.getWhatever();
String imgPath = null;
if(news.hasImage()){
String tempPath = news.getImage();
File f = new File(tempPath);
if(f.canRead() && f.exists()){
imgPath = tempPath;
}
}
// html bauen:
stringBuilder.append(...);
if(imgPath != null){
stringBuilder.append("src= blablabla" + imagePath + "usw...");
}
hat er folgendes gemacht:
Code:
stringBuilder.append( "<span>" + Something().getContent().getNews().getTitle() + "someotherhtmltags etc" + Something().getContent().getNews().getWhatever()+" usw");
if(Something().getContent().getNews().getImage() != null){
File f = new File(Something().getContent().getNews().getImage());
if(f.canRead() && f.exists()){
stringBuilder.append("src= blablabla" + Something().getContent().getNews().getImage() + "usw...");
}
}
Seine Begründung wieder: "Du sparst dir den lokalen String imgPath".
So also ich hab mit ihm drüber geredet und langer Rede kurzer Sinn:
Er meinte er will keine unnötigen Objekte erstellen, weil Strings sehr teuer sind.
Das glaub ich ja, hab ich auch oft gehört. Okay, also erstell ich keine lokalen Strings mehr,
obwohl das ja eig. auch nur Referenzen speichert, meinte er dass da eine String-Tabelle
durchsucht wird ob es den schon gibt, und das kostet Zeit.
Er sagte einfach Strings sind eine Ausnahme weil sie wie Primitive behandelt werden.
Also gut, damit kann ich leben.
Aber nichmal Referenzen auf "echte Objekte" darf ich machen:
Code:
News news = Something().getContent().getNews(); // <-- nich mal das!
..sondern soll bei jedem Aufruf über Something().getContent().getNews() gehen.
Weil's die Referenz ja schon gibt.
Aber mein news-Objekt ist ja nicht "new", also auch nur eine Referenz = 4 Byte?
Also ich weiss nicht. Türlich ist er sicherlich besser als ich im Programmieren, aber ich wollte
einfach hier mal nachfragen.
Ist das echt so krass, dass man das so macht? Keinerlei lokale Hilfs-Variablen usw
erstellen, sondern lieber ellenlange unübersichtliche Code-Zeilen haben, nur weil man damit
ein paar Byte im Speicher oder Rechenzeit spart?
Der komplette Code den er schreibt sieht so aus, für mich total unübersichtlich.
Ist einfach das komplette Gegenteil von der Art, wie ich eig. code:
Sobald ich an einer Stelle mehr als einmal eine Info von aussen brauch, speicher
ich mir die lokal in einer Referenz ab, und nutz dann diese, statt jedesmal wieder
die Methoden von aussen aufzurufen.
Wie is das so bei euch "anderen"? Könnt ihr das bestätigen oder nicht?
Danke
PS: Wie kann ich eig. testen um wieviel Speicherplatz mehr lokale
Referenzen brauchen?
Ich hab über Runtime.getRuntime().totalMemory() gelesen aber das bringt mir
irgendwie immer den gleichen Wert, total egal was für Objekte oder so ich erstelle...
PPS: Ich hab grad ein Test String vs StringBuilder gemacht. Ist StringBuilder nur
schneller oder braucht er auch weniger Speicher?
Zuletzt bearbeitet: