Funktionen vs Methods in Scala

Spin

Top Contributor
Hallo liebe Community,

mein Studium fängt wieder an und so langsam muss ich mich wieder mit Scala auseinandersetzen.
Mit Hilfe eures Wissens bin ich schon einen immensen Schritt voran gekommen, aber ich habe nach wie vor Probleme mit funktionaler Programmierung.

Zwar programmiere ich seit langen Javascript und kenne da Curring , Closures, higher functions ...benutzt man ständig.

Aber was zu Hölle mein Scala mit Methode und Functions.

def simpleFunction(x:Int) : Int = x+y

Das ist eine Funktion!


Wenn ich das nun in einer klasse definieren und nicht in einem Modul (object), dann heißt das Methode?

class Person {

def nameExitsts(text:String) : Boolean = if (text) ; true
}


Eine Methode gehört einem Objekt an und kann dann mit Object.methode aufgerufen werden?
Ich bitte um Hilfe, vielen Dank .)
 

0x7F800000

Top Contributor
Mit Hilfe eures Wissens bin ich schon einen immensen Schritt voran gekommen, aber ich habe nach wie vor Probleme mit funktionaler Programmierung.
Echt? Ist aus dem Vortrag was geworden? Hab's irgendwann nicht mehr so ganz genau mitverfolgt, sorry^^

Aber was zu Hölle mein Scala mit Methode und Functions.
Methoden sind dasselbe, wie in Java: die hängen an instanzen von Objekten herum, und tun irgendwas:
Code:
class X{
  def dasIstNeMethode(...):Int = { hier darf man auf andere member von X zugreifen }
}

object O{
  def dasIstAuchEineStinknormaleMethode(){
    // nur hängt die an einer instanz einer singleton-klasse
  }
}

package object mypackage{
  // das ist eigentlich wieder eine methode, nur soll sie den anschein erwecken
  // "einfach so im package rumzuschweben" und an kein Objekt gebunden zu sein.
  // Sie sollte in den seltensten Fällen auf Member-Variablen des package-objektes zugreifen
  def myMethod(x: Int ) = x * x
}

"Funktionen" dagegen sind keine Methoden, sondern Instanzen der Klassen [c]Function1[-X, +Y][/c], [c]Function2[-X1, -X2, +Y][/c] etc. Von der JVM werden sie wie stinknormale Klassen gehandhabt, das könnte man alles in Java 1:1 genauso hinschreiben. Der Unterschied besteht darin, dass Scala für solche Klassen eine extrem kompakte Syntax zur Verfügung stellt. Erstens: Diese Klassen implementieren Methoden [c]apply(x: X): Y[/c] bzw [c]apply(x1: X1, x2: X2): Y[/c], und deswegen kann man beispielsweise kurzerhand [c]f(5)[/c] schreiben, wenn [c]f[/c] vom Typ
Code:
Function1[Int, Int][/c] ist (denn apply-methode muss nicht ausgeschrieben werden, klammer reichen). Das funktioniert übrigens mit allen Klassen, die [c]apply[/c] impementieren. Zweitens: bei Java müsste man jedes mal eine furchterregende Wurscht der Gestalt
[code=Java]
Function<Int, Int> square = new Function<Integer, Integer>(){
  @Override 
  public Integer apply(Integer x){
    return x*x;
  }
};

Function<Int,Boolean> predicate = new Function<Integer, Boolean>(){
  @Override
  public Boolean apply(Integer x){
    return x>5;
  }
}
hinschreiben. Da Scala sich als Funktionale Sprache versteht, ist sowas natürlich völlig unerträglich, deswegen gibt es für die Erzeugung von Function-Instanzen eine wesentlich kompaktere Syntax mit [c]=>[/c]:
Code:
val sq = (x: Int) => x * x
val predicate = (x: Int) => x > 5
Oder noch kürzer (bei parametern, die man nur ein einziges mal verwenden muss):
Code:
val predicate2 = (_: Int) > 5
Oder noch kürzer, wenn man von der Typinferenz gebrauch macht:
Code:
myIntegerList.filter(_ > 5) // filtert zahlen größer fünf heraus

Nochmal: das ist im wesentlichen äquivalent zu Java-Analogon:
Java:
myIntegerList.filter(new Function<Int, Boolean>(){
  @Override
  public Boolean apply(Integer i){
    return i > 5;
  }
}
nur bei weitem nicht so brutalst aufgebläht.

Der wesentliche Unterschied: Man kann Funktionen als Parameter übergeben (weil es ja nur stinknormale Instanzen, wie Integer und Strings sind), Methoden dagegen kann man nur definieren, annotieren, dokumentieren und aufrufen, sonst nichts. Aber sogar dieser feine Unterschied ist für Anfänger manchmal schwer zu erkennen, weil man methoden schnell zu funktionen closure'n kann, und funktionen selbstverständlich in der methoden-deklaration aufrufen kann.

def simpleFunction(x:Int) : Int = x+y

Das ist eine Funktion!
Nö. Das ist eine Methode von irgendetwas.
 
Zuletzt bearbeitet:

Spin

Top Contributor
Moin, ich schaue mir morgen deine Antwort genauer an und vielen lieben dank dass du mir wieder weiter hilfst.

Ich studiere an der Uni Lübeck und dort belege ich das Fach Programmiersprachen und Algorithmendesign. In beiden Fächern wird lediglich in Scala programmiert.

Ich kann nicht jeden Tag an Scala arbeiten, daher kommen meine Fragen immer Step by Step und manchmal schaffe ich es nicht gleich gute Antworten auszuwerten :)

Ich arbeite nebenbei als PHP und Javascript Entwickler und Java + Scala lediglich im Studium. Weiter schreibe ich Treiber in C für Infrarot und Bleutooth, Wireless Lan.

Das nimmt alles viel Zeit in Anspruch....mein English ist halt nicht so gut und ich vertehe somit teilweise nicht alle Artikel die es so im Netz gibt. Es gibt zahlreiche Artikel die mir den Unterschied erklären( Funktionen vs. Methods) aber keiner ist mal kurz und knapp auf den Punkt gebracht ;)

OOP und przedural + pseudo funktional in javascript .... alles easy..... aber warum ich mich Scala so schwer tue , weiss ich nicht---- vielleicht weil ich noch nie richtig gecoded habe.

Meine Eclipse IDE packt rum mit Scala und das macht halt kein Bock ;)
Vorallem ist Scala ein Mischmasch aus 100 Sprachen (semantisch und Syntaktisch) , was echt sehr anspruchsvoll ist.

Naja ich arbeite weiter dran und PS: Mein Vortrag habe ich noch nicht gehalten ;)
Kommt noch... ich mache Sonntag die Folien fertig ( ja......so trödel ich rum ) ^^ .... und schicke dir die denn mal ---- hoffe nicht alles ändern zu müssen ;)

Vielen dank, dass du mich so unterstützt.

grüße Spin
 

0x7F800000

Top Contributor
Ich studiere an der Uni Lübeck und dort belege ich das Fach Programmiersprachen und Algorithmendesign. In beiden Fächern wird lediglich in Scala programmiert.
Geil!

aber warum ich mich Scala so schwer tue , weiss ich nicht---- vielleicht weil ich noch nie richtig gecoded habe.
Programmieren lernt man nur durch programmieren. Scala lernt man nur durch programmieren von großen Bibliotheken, erst da wird deutlich, wozu Odersky sich das alles ausgedacht hat. Bei Hello-World-For-Int-I-Printl kommt das nicht so richtig zum tragen.

Vorallem ist Scala ein Mischmasch aus 100 Sprachen
Naja, nöö... Java, Haskell, ML, und das war's eigentlich schon. XML-Unterstützung ist gehört ja nicht wirklich zum unumgänglichen Sprachkern, den jeder braucht. Und es ist inspiriert von den Sprachen, es ist kein "Mischmasch", sondern mit abstand die am weitsichtigsten und akkuratesten entworfene Sprache, die ich kenne ;)

und schicke dir die denn mal ---- hoffe nicht alles ändern zu müssen ;)
Nja, kannst du zwar machen, aber ich werde mir nicht viel Zeit dafür nehmen können, ich werd's höchstens durchblättern. Semester hat begonnen, sorry...
 

escalate

Mitglied
Ich studiere an der Uni Lübeck und dort belege ich das Fach Programmiersprachen und Algorithmendesign. In beiden Fächern wird lediglich in Scala programmiert.
Interessant zu hören, wo es noch Scala-Nester an den Unis gibt. ;)

Ich weiß von Leuten an der Uni Bayreuth, in Würzburg und an der Beuth-Hochschule in Berlin, da wir alle an einem Scala-Projekt arbeiten.
In Bayreuth hier hatten wir letztes Semester die erste Vorlesung "Funktionale Programmierung (mit Scala)". Bei uns haben immerhin die fast alle Informatik-Master schonmal Scala gesehen und das ist doch ganz gut so.

Naja ich arbeite weiter dran und PS: Mein Vortrag habe ich noch nicht gehalten ;)
Kommt noch... ich mache Sonntag die Folien fertig ( ja......so trödel ich rum ) ^^ .... und schicke dir die denn mal ---- hoffe nicht alles ändern zu müssen ;)
Kannst mir auch mal schicken, bei mir hat zwar auch das Semester begonnen, aber dafür müsste ich noch etwas Zeit finden ;)
 

0x7F800000

Top Contributor
In Bayreuth hier hatten wir letztes Semester die erste Vorlesung "Funktionale Programmierung (mit Scala)".
Ich blick da nicht durch: Ecological Modelling: Staff. Erstens verstehe ich nicht, wie jemand gleich 8 Veranstaltungen pro Semester halten/betreuen soll, zweitens finde ich in dieser Liste nirgends "Funktionale Progammierung", obwohl's hier https://qis-lsf.uvw.uni-bayreuth.de/qisserver/rds?state=medialoader&application=lsf&objectid=164 drinsteht ???:L Wer hat's denn nun gehalten?
 

escalate

Mitglied
Ich blick da nicht durch: Ecological Modelling: Staff. Erstens verstehe ich nicht, wie jemand gleich 8 Veranstaltungen pro Semester halten/betreuen soll
Keine Ahnung wie die Beteiligung bei den anderen Veranstaltungen war, aber die Funktionale Programmierung hat Baltasar alleine gehalten.

Weiß auch nicht, warum das nicht auf der Seite steht, vielleicht um die Geoökologen nicht zu verwirren. :)
Für die sind die Veranstaltungen bestimmt und vielleicht noch für die 1-2 Umweltinformatiker pro Jahrgang, die hin und wieder vorhanden sind ;)

Ich hoffe mal, dass die FP-Vorlesung kein Einzelfall bleibt, im Modulhandbuch steht es als "zeitweilig angeboten".
 

0x7F800000

Top Contributor
Keine Ahnung wie die Beteiligung bei den anderen Veranstaltungen war, aber die Funktionale Programmierung hat Baltasar alleine gehalten.
Okay... Den Menschen merk ich mir mal, der hat wenigstens Erfahrungen damit gesammelt, wie sich Scala auf Studenten in solchen Vorlesungen auswirkt, den könnte man bei aufkeimenden Diskussionen zu diesem Thema ggf. mal anschreiben und fragen, wie es so war^^

Ich hoffe mal, dass die FP-Vorlesung kein Einzelfall bleibt, im Modulhandbuch steht es als "zeitweilig angeboten".
Was ich nicht verstehe: an meiner Uni gibt es doch auch Profs, die sich mit Compilerbau befassen, und sich für ästhetische neue Programmiersprachen interessieren sollten. Wo schauen sie denn alle hin? :bahnhof:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Frage zu Fallunterscheidung bei Funktionen JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
K Unterschied funktionial <-> OO anhand von Scala <-> Java JVM Sprachen: Kotlin, Scala, Groovy, Jython... 5
M Experten für Scala-Play- Programmierung gesucht!! JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
M Scala-Programm mit Netbeans compilieren JVM Sprachen: Kotlin, Scala, Groovy, Jython... 1
M Suche Scala Entwickler (Umsteiger [JAVA]) für Zusammenarbeit an privatem Projekt JVM Sprachen: Kotlin, Scala, Groovy, Jython... 7
R Frage zu Scala Code JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Landei Scala Scala 2.10 RC JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
schlingel Scala Schulung - Gratis vom Scala-Schöpfer JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Landei Scala Scala-Kritik JVM Sprachen: Kotlin, Scala, Groovy, Jython... 151
Spin Scala Eclipse IDE JVM Sprachen: Kotlin, Scala, Groovy, Jython... 7
Landei Scala Freies eBook "Scala for the impatient" JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Spin Arithmetik in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 32
0x7F800000 Numerik in Scala (Performance) JVM Sprachen: Kotlin, Scala, Groovy, Jython... 14
Spin Scala MenuListener JVM Sprachen: Kotlin, Scala, Groovy, Jython... 5
Spin Scala in Eclipse will nicht. JVM Sprachen: Kotlin, Scala, Groovy, Jython... 15
Landei Scala Deutsches Scala-Tutorial JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
B Scala oder Clojure JVM Sprachen: Kotlin, Scala, Groovy, Jython... 6
Landei Scala "Programming in Scala" - erste Ausgabe kostenlos JVM Sprachen: Kotlin, Scala, Groovy, Jython... 1
W Scala *.Scala to *.jar JVM Sprachen: Kotlin, Scala, Groovy, Jython... 6
H Scala und Aspekte JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
S Scala Klasse.class in Scala? JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
B Scala Scala und Netbeans GUI Editor JVM Sprachen: Kotlin, Scala, Groovy, Jython... 15
S Scala: Parser und Lexical JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
D Wie manche ich das in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 12
S Scala: Static - Konstruktor?? JVM Sprachen: Kotlin, Scala, Groovy, Jython... 5
G Scala IDE JVM Sprachen: Kotlin, Scala, Groovy, Jython... 18
A Scala und J2ME JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
S Scala Fragen zu Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 21
D (Mathe-) Vektoren in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
Landei Scala im Kommen :-) JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4

Ähnliche Java Themen

Neue Themen


Oben