|
|
|
|
Moin. Ich versuche mich mal wieder an Java, aber vermisse ganz furchtbar call by reference.
Es gibt bestimmt eine tolle Lösung, aber dafür reichen meine SKillz nicht.
Bisher kann der Code schon:
|
Code: |
for i in (...) { //diese Schleife nimmt sich einen Datensatz, extrahiert die Parameter, verwurstet den Datensatz mit den Parametern, egal wie toll die sind
foo;
bar;
}
|
|
Das soll auch weiter funktionieren, aber optional soll auch das hier gehen:
|
Code: |
for i in (...) { //diese Schleife durchsucht die Eingangsdaten nach den tollsten Parametern
foo;
}
for i in (...) { //diese Schleife verarbeitet alle Eingangsdaten mit den tollsten Parametern
bar;
}
|
|
Da würde es sich ja anbieten foo und bar in Funktionen auszulagern, richtig?
Aus foo() sollen ein Double und ein Integer rausploppen. In C würde ich dem Ding einfach 2 Pointer in die Hand drücken, fertig.
In Java? Muss ich da jetzt wirklich eine neue Klasse schreiben?
Muss das wiklich so scheiße lang sein wie in diesem Beispiel:
|
Code: |
final class MyResult {
private final int first;
private final int second;
public MyResult(int first, int second) {
this.first = first;
this.second = second;
}
public int getFirst() {
return first;
}
public int getSecond() {
return second;
}
}
|
|
?
Spoiler - markieren, um zu lesen:
hoffentlich habe ich sowas hier nicht chonmal gefragt und iweder vergessen.. ich komme nicht so oft zum Programmieren wie mir lieb wäre
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Rootsquash am 04.04.2019 15:35]
|
|
|
|
|
|
| Zitat von csde_rats
Was ist denn der gegebene Anlass?
| |
Unfähige Software Devs..
Würde nur ungern alle am Markt verfügbaren Obfuscatoren/Anti-Debugger evaluieren :/
|
|
|
|
|
|
|
| Zitat von Rootsquash
Moin. Ich versuche mich mal wieder an Java, aber vermisse ganz furchtbar call by reference.
Es gibt bestimmt eine tolle Lösung, aber dafür reichen meine SKillz nicht.
Bisher kann der Code schon:
|
Code: |
for i in (...) { //diese Schleife nimmt sich einen Datensatz, extrahiert die Parameter, verwurstet den Datensatz mit den Parametern, egal wie toll die sind
foo;
bar;
}
|
|
Das soll auch weiter funktionieren, aber optional soll auch das hier gehen:
|
Code: |
for i in (...) { //diese Schleife durchsucht die Eingangsdaten nach den tollsten Parametern
foo;
}
for i in (...) { //diese Schleife verarbeitet alle Eingangsdaten mit den tollsten Parametern
bar;
}
|
|
Da würde es sich ja anbieten foo und bar in Funktionen auszulagern, richtig?
Aus foo() sollen ein Double und ein Integer rausploppen. In C würde ich dem Ding einfach 2 Pointer in die Hand drücken, fertig.
In Java? Muss ich da jetzt wirklich eine neue Klasse schreiben?
Muss das wiklich so scheiße lang sein wie in diesem Beispiel:
|
Code: |
final class MyResult {
private final int first;
private final int second;
public MyResult(int first, int second) {
this.first = first;
this.second = second;
}
public int getFirst() {
return first;
}
public int getSecond() {
return second;
}
}
|
|
?
Spoiler - markieren, um zu lesen:
hoffentlich habe ich sowas hier nicht chonmal gefragt und iweder vergessen.. ich komme nicht so oft zum Programmieren wie mir lieb wäre
| |
Ich glaube tatsächlich, dass das in Java nicht geht - aber ich hab auch schon länger nix mehr damit gemacht.
Methodenargumente werden immer per Value überreicht, nie per Reference. Du kannst in einer Methode aber z.B. ein Object übergeben, und auf dem Object setFoo(...) callen - das wird dann schon per Referenz gesetzt.
Entweder also eine Klasse returnen oder z.B. ne ArrayList, oder so.
ODER GLOBALE KLASSENVARIABLEN!
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von derSenner am 04.04.2019 16:15]
|
|
|
|
|
|
Java übergibt alles By-Value. Primitive Typen (z.B. int, bool) gehen also nur By-Value. Objekte existieren ohnehin nur als Referenzen auf fremdverwaltete Objekte, ergo werden grundsätzlich nur Referenzen auf Objekte (entsprechend By-Value, de-facto By-Reference, vulgo Call-By-Object) rumgereicht.
tl;dr ja dafür brauchst du ne Klasse.
|
|
|
|
|
|
|
Geil, danke.
Eine eigene Klasse, nur weil man statt einem Integer einen Integer und ein Double zurückgeben will. Was haben die geraucht?
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Rootsquash am 04.04.2019 16:37]
|
|
|
|
|
|
Zur Verteidigung: Mir fällt keine Sprache ein in der das anders wäre.
Zur Verdammung: Java Syntax ist halt kacke und jede andere Sprache (sogar cpp!) kam auf die Idee Syntaxzucker dafür einzuführen.
|
|
|
|
|
|
|
Das braucht auch in C++ eine eigene Klasse, wenn man keine output parameter übergeben will (und keiner will das). Allerdings wird die Klasse in der stl mitgeliefert (std:air).
edit: Und vollste Zustimmung@borg. Ist in anderen Sprachen, die versuchen, Nutzern das Leben durch Vermischung von Objekten und Referenzen einfacher zu machen, ähnlich: Python hat auch eine ähnliche Unterscheidung in primitive Types (int, float) und Objekte.
edit2: Und deswegen nutzt man in der JVM auch Kotlin, da sieht deine neue Klasse dann so aus:
|
Code: |
data class LolPot(val integer: Int, val double: Double)
|
|
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von PutzFrau am 04.04.2019 16:47]
|
|
|
|
|
|
Nö. Python hat nur Objekte.
e: Ehrlich gesagt sehe ich es auch eher umgekehrt. Objekte sind das primäre Konzept der Sprache und dann meinte jemand, dass es vong Performance her ja voll toll wäre primitive Typen einzuführen (<- ich glaube, dass es in Java's Entwicklungsgeschichte sogar so gelaufen ist). Tatsächlich ist mit nem JIT (oder schon Optimierungen auf Bytecode-Ebene) sowas aber kein sonderlich relevanter Unterschied... quasi YAGNI im Typsystem.
| Zitat von Rootsquash
Geil, danke.
Eine eigene Klasse, nur weil man statt einem Integer einen Integer und ein Double zurückgeben will. Was haben die geraucht?
| |
Integer und Double wären ja By-Object. Nur sind die beiden halt immutable
int != Integer
ersteres ist ein primitiver Typ
letzteres ist eine Klasse. Im Java-Jargon ist "Integer das Boxing von int".
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von csde_rats am 04.04.2019 16:49]
|
|
|
|
|
|
Java final ist auch so eine behinderte Sache: Kann bitte jemand mal C++-style const in Java hinzufügen?
|
|
|
|
|
|
|
Ja, ungenau formuliert, aber das ist besides the point, weil das Resultat für den Coder in diesem Zusammenhang dasselbe ist:
|
Code: |
def add(i):
i + 1
a = 1
add(a)
print(a)
|
|
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von PutzFrau am 04.04.2019 16:52]
|
|
|
|
|
|
Achja? Was ist denn bei char**const s; const?
e: Genau mein Punkt. Das ist konzeptionell sauberer, weil Parameter sich immer gleich verhalten, aber die Objekte unterschiedlich sein können. Java hat unterschiedliche Arten von Parametern und unterschiedliche Arten von Objekten, was unnötig ist. Immutable Integer by-object ist aus Programmierersicht das gleiche wie int by-value, nur dass es orthogonale Konzepte vermischt, weil ich z.B. auch einen MutableInteger by-object haben kann, der sich entsprechend anders verhält als int by-value, wobei int[] natürlich wieder ein Objekt ist und sich also nicht wie ein int-Parameter verhält. Hooray.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von csde_rats am 04.04.2019 16:57]
|
|
|
|
|
|
| Zitat von csde_rats
Achja? Was ist denn bei char**const s; const?
| |
Der Pointer natürlich. Aber es fehlt einfach eine Möglichkeit, Objekte const zu machen in Java. Es ist wundervoll in cpp:
Da weiß man direkt, dass der state von lol nicht verändert wird.
Was hat Java. final ? Lol!
|
|
|
|
|
|
|
| Zitat von csde_rats
e: Genau mein Punkt. Das ist konzeptionell sauberer, weil Parameter sich immer gleich verhalten, aber die Objekte unterschiedlich sein können. Java hat unterschiedliche Arten von Parametern und unterschiedliche Arten von Objekten, was unnötig ist. Immutable Integer by-object ist aus Programmierersicht das gleiche wie int by-value, nur dass es orthogonale Konzepte vermischt, weil ich z.B. auch einen MutableInteger by-object haben kann, der sich entsprechend anders verhält als int by-value, wobei int[] natürlich wieder ein Objekt ist.
| |
Meine Intention war niemals, das Java Design zu verteidigen.
|
|
|
|
|
|
|
Und einfach in ein Array stecken und das zurück geben geht nicht?
|
|
|
|
|
|
|
Geht schon, aber das muss dann halt ein Object[] oder ein Number[] sein, mit anschließendem cast (oder Number.toDouble). Eher nervig.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von PutzFrau am 04.04.2019 17:02]
|
|
|
|
|
|
| Zitat von b4ckspin
Ich suche aus gegebenen Anlass einen guten DotNet Obfuscator / Anti-Debugger.
Folgende Tools hab ich mir mal angesehen:
- ILProtector
- Dotfuscator
- Confuser
Hat jemand schon Erfahrung mit diesen oder ähnlichen Tools und evtl. ne Empfehlung?
| |
Unsere .Net Leute nutzen babelfor.NET.
|
|
|
|
|
|
|
|
Code: |
class BestMod {
private double highestMod;
private int highestModInd;
public BestMod() {
this.highestMod = 0;
this.highestModInd = 0;
}
public double getHighestMod() {
return highestMod;
}
}
BestMod Mod = new BestMod();
Mod.highestMod = modulation;
Mod.highestModInd = timePos;
|
|
Ich bin mit Objektorientierungnoch nicht warm geworden. In C wäre das so viel schöner.
|
|
|
|
|
|
|
Du wolltest sagen in LISP wäre das viel schöner
[e] Wie ist denn die Lernkurve von Java zu Kotlin? Ich hätte da ziemlich Bock drauf, dachte aber ich will erst durch Java vernünftig durchsteigen
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von Dumenikl am 04.04.2019 19:51]
|
|
|
|
|
|
Kotlin ist ziemlich nice kann aber ohne IDE schwer zu lesen sein. Java ist sehr einfach, ist aber ohne IDE unerträglich.
Java lesen können sollte man so oder so, aber ich mein... das ist jetzt nicht so schwer.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 04.04.2019 20:00]
|
|
|
|
|
|
Java kann leider auch ein unglaubliches Arschloch sein. Aber insgesamt stimmt das natürlich. Man kann in Java sehr schnell sehr effizient sein.
¤: Wobei sich viele Javaprobleme eher auf die JVM reduzieren lassen, respektive inzwischen auch den Mismatch zwischen Sprach- und VMFeatures.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von SwissBushIndian am 04.04.2019 20:02]
|
|
|
|
|
|
| Zitat von Rootsquash
|
Code: |
class BestMod {
private double highestMod;
private int highestModInd;
public BestMod() {
this.highestMod = 0;
this.highestModInd = 0;
}
public double getHighestMod() {
return highestMod;
}
}
BestMod Mod = new BestMod();
Mod.highestMod = modulation;
Mod.highestModInd = timePos;
|
|
Ich bin mit Objektorientierungnoch nicht warm geworden. In C wäre das so viel schöner.
| |
Naja, was immer dein Code auch tun soll, die letzten Zeilen sind wenigstens komisch, wenn nicht sogar falsch. Der Rest halt eher holprig würde ich sagen.
Objektorientierung ist mit Sicherheit kein Allheilmittel, man kann aber in jeder Sprache und in jedem Paradigma absolut beschissenen Code schreiben.
Ich bin im Moment sehr von (möglichst) funktionaler Programmierung in Scala überzeugt. Damit kann man (für mich) ziemlich geilen Code schreiben und auf die Java-Infrastruktur zurückgreifen. Kotlin hat sich bisher in der Firma einfach nicht durchgesetzt. Gerade Frameworks/Libraries wie Akka rocken in Scala meiner Meinung nach einfach nur, aber es gibt natürlich auch Nachteile.
Und IntelliJ ist toll, auch wenn die letzten Updates schon ein wenig unausgegoren waren an einigen Stellen leider. Trotzdem geil. VSCode nehme ich aber mittlerweile für React/Typescript/JavaScript-Entwicklung, da ist es einfach etwas leichtgewichtiger als IntelliJ.
Nur so ein richtig richtig gutes Multi-Datenbanktool suche ich noch. Habe viele durchprobiert, irgendwo haben sie mich alle mal abgefuckt, selbst das IntelliJ-Tool
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von [smith] am 04.04.2019 21:57]
|
|
|
|
|
|
| Zitat von Dumenikl
Du wolltest sagen in LISP wäre das viel schöner
[e] Wie ist denn die Lernkurve von Java zu Kotlin? Ich hätte da ziemlich Bock drauf, dachte aber ich will erst durch Java vernünftig durchsteigen
| |
Kotlin ist ziemlich easy, wenn man Java kann. Ich hatte allerdings auch schon 4 Jahre professionelle Java Erfahrung, bevor ich Kotlin angeschaut habe.
|
|
|
|
|
|
|
| Zitat von [smith]
Nur so ein richtig richtig gutes Multi-Datenbanktool suche ich noch. Habe viele durchprobiert, irgendwo haben sie mich alle mal abgefuckt, selbst das IntelliJ-Tool
| |
Ich bin inzwischen bei DBeaver geladnet. Es kann akzeptabel DB2, und die anderen auch.
|
|
|
|
|
|
|
| Zitat von PutzFrau
| Zitat von Dumenikl
Du wolltest sagen in LISP wäre das viel schöner
[e] Wie ist denn die Lernkurve von Java zu Kotlin? Ich hätte da ziemlich Bock drauf, dachte aber ich will erst durch Java vernünftig durchsteigen
| |
Kotlin ist ziemlich easy, wenn man Java kann. Ich hatte allerdings auch schon 4 Jahre professionelle Java Erfahrung, bevor ich Kotlin angeschaut habe.
| |
Ich hatte nur so viel Erfahrung mit Java wie man braucht Informatik zu studieren (und dann beruflich vor allem Python, C++ und TS gemacht) und bin ziemlich sofort in Kotlin rein gekommen.
|
|
|
|
|
|
|
Das klingt ja ganz zuversichtlich. Ich habe ziemlich Spaß dran Sprachen und Konzepte zu lernen. Hätte auch ziemlich Lust auf Clojure weil ich das Gefühl habe dabe noch viel neues lernen zu können.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Dumenikl am 05.04.2019 10:08]
|
|
|
|
|
|
Da werfe ich doch gleich mal Brave Clojure in den Raum. Ich mochte.
|
|
|
|
|
|
|
Ja da freue ich mich schon drauf.
Im Moment frustriert mich Thinking in Java IV schon hart.
Bis jetzt habe ich mich ohne die zum Buch gehörenden Klassen durchgeschlagen, die meisten Übungen lassen sich auch so machen.
Ab der Hälfte des Buches wird es aber dann schon schwieriger ohne auszukommen, ich sehe aber keine Chance den Kram irgendwie ans laufen zu bekommen. Das ganze basiert ja noch auf Java 5/6. Jemand hat ein Maven-Projekt daraus gemacht (was auch immer das genau ist), welches aber auch Fehler en masse wirft.
Für jemanden, der in diesem ganzen Ökosystem noch nicht wirklich durchsteigt und froh ist, wenn der eigene Classpath irgendwie hinhaut eine doch relativ unmögliche Aufgabe.
Einen kompletten freien Vormittag verballert und nichts dazu gelernt
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Dumenikl am 05.04.2019 12:31]
|
|
|
|
|
|
Ich empfehle ja immer Effective Java,aber das ist eher für Leute, die sich mit Java bereits wohl fühlen.
Aber ich denke On Java 8 vom gleichen Author wie Thinking in Java würde wohl mehr Sinn machen. Java 8 ist an vielen Stellen nicht mehr mit den Vorgängerversionen zu vergleichen, insbesondere was idiomatischen Code angeht.
|
|
|
|
|
|
|
Ein Prüfungsprotokoll geschrieben von Terrence Tao über eine seiner eigenen Prüfungen: https://web.math.princeton.edu/generals/tao_terence
Es wirkt erstaunlich wie Protokolle aus meinen Diplomsprüfungen, und erfreulich menschlich, obwohl ich kaum ein Thema kenne.
Wenn ist das Nunstruck git und Slotermeyer? Ja!... Beiherhund das Oder die Flipperwaldt gersput.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 05.04.2019 12:50]
|
|
|
|
|
|
Ah, ich dachte tatsächlich immer, dass OnJava8 nur eine Erweiterung von TIJ ist, die auf die Änderungen eingeht. Tatsächlich scheint es große Teile von TIJ in aktualisierter Form zu übernehmen. Das macht es interessant. Danke für den Hinweis!
|
|
|
|
|
|
Thema: pOT-lnformatik, Mathematik, Physik XXII ( Jetzt nehmen uns Computer schon die Memes weg! ) |