Einführung in die Funktionale Programmierung (einfach und praxisnah!)

Sdílet
Vložit
  • čas přidán 27. 07. 2024

Komentáře • 172

  • @NiklasSteenfatt
    @NiklasSteenfatt  Před 8 měsíci +5

    Wer guckt das Video noch in 2023? Ich habe inzwischen übrigens mein komplettes Produktivitätssystem veröffentlicht: fokus.so

  • @NiklasSteenfatt
    @NiklasSteenfatt  Před 4 lety +30

    Ich musste das Video heute zweimal hochladen, weil beim ersten mal ein Fehler passiert war und man an einer Stelle gar nicht den richtigen Teil des Bildschirms sehen konnte. Das ist glücklicherweise sofort jemandem aufgefallen. Sorry, falls das jemanden verwirrt hat!

  • @alinivan151
    @alinivan151 Před 3 lety +44

    Sehr guter, qualitativ Hochwertiger Content. Vielen Dank!

  • @tracetv8115
    @tracetv8115 Před 3 lety +17

    Endlich mal ein Channel der vernünftige Programmierung zeigt, anstatt das 500ste Pr9grammier Tutorial, das dort aufhört, wo die eig. Programmierung anfängt.
    Bitte bring weiter so coole Paradigmen und spannende Themen!

  • @memorial2k8
    @memorial2k8 Před 3 lety +2

    dein kanal ist großartig! ich bin eigentlich musiker aber habe schon mein leben lang ein großes interesse für informatik und dein kanal macht sehr viel freude zu verfolgen! großartiger content, da bekommt man lust auch irgendwann einmal informatik zu studieren :D

  • @fentonmsu
    @fentonmsu Před 3 lety +68

    Endlich jemand, der richtiges Deutsch spricht.

  • @chikken007
    @chikken007 Před 3 lety +5

    Sehr gutes Video. Klar strukturiert und formuliert. Gute Einführung in die Grundkonzepte. Danke ;)

  • @lukasschmahl147
    @lukasschmahl147 Před 2 lety

    Ich bereue mein Abo keineswegs. Content vom aller feinsten. Jeder der das Glück haben darf von dir Unterrichtet zu werden kann sich glücklich schätzen!

  • @heinrichschiller4673
    @heinrichschiller4673 Před 3 lety +7

    Ich, als Python nicht Programmierer, habe dein Video tatsächlich verstanden. Also sehr gut erklärt!

  • @rp8133
    @rp8133 Před 3 lety +5

    Tolles Video. Schön zu sehen, dass mit Python eine Sprache existiert, die komplizierte Aufgaben sehr elegant und einfach-zu-lesen lösen kann. Übrigens kann man statt Java auch C# als Parallelsprache hernehmen, denn C# bietet (in den letzten Jahren als Zuwachs gewonnen) manche Konzepte, die Python für C#-Umsteiger einfacher verständlich machen. Auch arbeitet sich C++ in die Welt von Closures (Lambdas), Coroutinen etc. pp. vor.
    Ein Trend in der Softwareentwicklung, den ich nach ca. 30 Jahren ausmachen kann: man versucht (in der Praxis) immer mehr, die objektorientierte und die funktionale Programmierung zu vereinen. Was durchauss Sinn macht. Objekte (Klassen) fassen die Daten und bestenfalls noch LowLevel-Methoden zusammen, Funktionen verarbeiten die Objekte in stringenter Art und Weise, ohne irgendwelche Nebenwirkungen. Das macht die ganze Geschichte natürlich auch sehr interessant für die (einfachere) Multithreading-Programmierung. Übrigens wird es nie wirklich eine 100%ige StateLess-Programmierung geben. Denn Software bildet die reale Welt ab, und diese ist nunmal statusbehaftet. Aber man kann das soweit wie möglich minimieren.

  • @oscarmeischner6560
    @oscarmeischner6560 Před 3 lety +3

    Ich finde das Anki- und Cambridgevideo am besten. Weiter so💪👍

  • @maestro4704
    @maestro4704 Před 3 lety

    Das Video ist echt klasse! Danke für das teilen deines Wissens.

  • @greenstargaming4745
    @greenstargaming4745 Před 3 lety +1

    Könnte stundelang einfach nur zuhören, toll erklärt :)

  • @flo_xd8702
    @flo_xd8702 Před 3 lety +1

    Respekt ! das hat mir sehr geholfen ich danke dir für das mega Video ich hoffe du machst weiter so 👍

  • @entropy1088
    @entropy1088 Před 2 lety +1

    Echt gutes Video! Deine Stimmlage und Sprachweise --> super

  • @bendikarbogast1229
    @bendikarbogast1229 Před 3 lety +3

    Finde das Video echt super und verstehe jetzt endlich, wie man funktional programmiert. Direkt an 2 Freunde weiterempfohlen und die Hausaufgaben hab ich natürlich auch gemacht:
    SPOILER!
    def anzahl_gerade_reduce(xs: list) -> int:
    return reduce(lambda y, x: y+1 if x % 2 == 0 else y, xs, 0)
    def anzahl_gerade_filter(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    def curry(foo, x) -> Callable[[list], int]:
    return lambda y, z: foo(x, y, z)
    def mein_filter(foo, my_list: list) -> list:
    return reduce(lambda new_list, l: new_list+[int(l)] if foo(l) else new_list, my_list, [])

  • @Himmelskastelan
    @Himmelskastelan Před 3 lety +1

    Ja so ein Video über Rekursionen wäre schon echt nett.
    Das bereitet mir so einiges Kopfzerbrechen.

  • @Projekt108
    @Projekt108 Před 3 lety

    Ich habe mit Programmieren aufgehört, als Objektorientierung anfing, also etwa 1989 😅. Damals war es Cobol, PL/I, Pascal und Z80-Assembler. Danke, für die sehr verständliche Erklärung!

  • @luccasangpur6527
    @luccasangpur6527 Před 3 lety

    Cooles Video! Zum ersten mal verstehe ich was Map und Reduce so machen.
    Mir haben deine Aufgaben sehr gefallen. Die meisten Schwierigkeiten hatte ich aber mit der gewöhnungsbedürftigen Syntax von Python.
    In Typscript ist es auch so dass man nicht gezwungen wird die Typen seiner Parameter und Return-Werte zu definieren, es aber der Lesbarkeit wahnsinnig hilft.
    Mich würde interessieren ob ich dabei alles richtig gemacht habe.
    Viel Erfolg auf CZcams.
    **Spoiler**
    def anzahl_gerade( xs : list ) -> int :
    return reduce(lambda a, b: a+1, [ x for x in xs if x % 2 == 0 ], 0)
    def curry( func : Callable , x ) -> Callable :
    return lambda *args : func( x , *args )
    def mein_filter( func : Callable[ [ int , int ] , bool ] , xs : list ) -> list :
    return reduce( lambda a , b : a + [ b ] if func( b ) else a , xs , [ ] )

  • @pawel_guzewicz
    @pawel_guzewicz Před 4 lety +10

    Really cool stuff! I learnt function currying with Haskell. We used to call functions with missing parameters "unfed" functions.

  • @businessparis9364
    @businessparis9364 Před 3 lety +12

    Wow extrem qualitativ hochwertiger Content, weiter so! Ich bin Java Programmierer und im Prinzip gibt es dort genau die gleichen funktionalen Elemente, die du hier in Python demonstriert hast. (bis auf list comprehesions)

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 3 lety +7

      Freut mich! Ja, hab ja sogar ein paar Beispiele in Java kurz im Video gezeigt. Zu Java wollte ich übrigens irgendwann in den nächsten Wochen nochmal ein Video machen. :)

  • @ivanbal
    @ivanbal Před 10 měsíci

    Eines Deiner besten Videos Niklas!

  • @xentox5016
    @xentox5016 Před 3 lety

    Meega gut erklärt, danke!

  • @anthonye2990
    @anthonye2990 Před 3 lety

    Super Video. Ich würde mich über ein paar Büchertips freuen zum Thema.

  • @vizenzovin
    @vizenzovin Před 3 měsíci

    beste Video über funktionale Programmierung

  • @markuswagner7816
    @markuswagner7816 Před 3 lety

    Richtiger guter Content!!

  • @TheKeule33
    @TheKeule33 Před 3 lety

    Du erklärst gut.

  • @mag8101
    @mag8101 Před 3 lety

    Mega Video! Danke :)

  • @baris1513
    @baris1513 Před 3 lety

    sehr interessant, ich bin nur leider noch nicht so weit in python. Aber hopefully bald dann komm ich hier nochmal her :)

  • @louispetrik7431
    @louispetrik7431 Před 4 lety +5

    Großartig, weiter so!

  • @zoepietrzak6108
    @zoepietrzak6108 Před 4 měsíci

    Haha mein Kopf raucht von den ganzen neuen Begriffen aber du hast das gut erklärt! Hab die Prinzipien zumindest weitgehend verstanden als komplette Anfängerin 😊

  • @kologitzi
    @kologitzi Před rokem

    Sehr hilfreich, danke.

  • @cgsman1
    @cgsman1 Před 3 lety +1

    Super gut erklärt ! Habe selten so eine durchdachte, übersichtsreiche Zusammenstellung von funktionalen Zusammenhängen so plastisch erklärt gefunden - vielen Dank ! Wäre auch eine optimale Herangehensweise für Informatik-Schüler*innen am Gymnasium !

    • @tommy40629
      @tommy40629 Před 11 měsíci +1

      Habe selten so dumme Menschen gesehen, die an Dingen festhalten, die von der Mehrheit abgelehnt werden. Auch von Sprachwissenschaftlern. Sprich normal oder lass es sein‼

  • @TheTimboo16
    @TheTimboo16 Před 3 lety

    Super Video! Könntest du noch ein Video speziell zu Funktoren und Monaden machen bitte?

  • @easypy
    @easypy Před 2 lety

    Wünsche mir gerne mehr von dir zum Thema Python :)

    • @tomdriver6733
      @tomdriver6733 Před rokem

      Python ist leider eine sehr lahme Programmiersprache.

  • @SkrtlIl
    @SkrtlIl Před 3 lety

    Erstmal tolles Video! Ich habe mich über den Wikipedia Artikel hinaus noch nicht mit funktionaler Programmierung beschäftigt benutze sie aber mit Python wie ich jetzt gelernt habe sehr oft :D. Ich wollte mal fragen ob du 10-Finger tippst, da es im Video so aussiehst als ob du dich, wenn du zu Sonderzeichen wechselst, oft kurz mit einem Blick auf das Keyboard umorientierst. Ich selbst benutze eine selbstgelernte, leicht merkwürdige Hybridform und ertappe mich auch oft dabei ab und zu auf meine Finger zu schauen wenn ich etwa von der Tilde zu Zahlen wechsel oder ähnliches.

  • @christiandietz7480
    @christiandietz7480 Před 2 lety

    geiles Video...weiter so!

  • @the_master_of_cramp
    @the_master_of_cramp Před 3 lety

    Sehr interessantes Video. Niklas, dein etwas prominenter Unterkiefer sieht ein wenig aus wie meiner und ich hab Dysgnathie; ich finde es sieht bei dir auch ein wenig so aus als wäre der Unterkiefer im Vergleich zum Oberkiefer zu weit vorne, nur als Tipp. Vielleicht solltest du es mal bei einem Kieferorthopäden überprüfen lassen ob die Kiefern richtig aufeinander stehen, weil sonst kann es später zu frühem Zahnverlust und fortschreitender Asymmetrie etc. durch Fehlbelastung kommen.

  • @SirLasterOfDesaster
    @SirLasterOfDesaster Před 3 lety

    Hi Niklas,
    hab dein Video gerade erst endeckt :D Super Erklärung!
    Zu dem funktionalen habe ich aber noch Fragen:
    Am Anfang sagst du ja, dass der Funktionale Ansatz NICHT von Zuständen abhängt. Wenn ich jetzt aber (als Beispile) eine Funktion bauen will, was mir mit Eingabe von Kundennummer die Brief Anrede+Name (Sehr geehrter Herr/Sehr geehre Frau) zusammenhängen soll, dann bekommt meine Funktion als Input wie gesagt die Kundennummer und liest aus der Kunden DB die Anrede (Herr/Frau) und Name aus. Und anhand des Status (ob Frau oder Mann) muss entweder "geehrter" oder "geehrte" verwendet werden => ist als Statusabhängig. Wie würde man so ein Beispiel in funktional implementieren?
    Danke schon mal und Lg

  • @okdoomer620
    @okdoomer620 Před 3 lety +1

    Gutes video. Dass None einfach nichts ist, kann aber zu Missverständen führen, und da du ja überall schon Typannotationen hingemacht hast, würde ich eher den Standpunkt vertreten, dass es eine Art Unit-Type ist, also ein Datentyp mit nur einem Wert, nämlich None. Damit lassen sich zwar keine Informationen transportieren, aber man kann ja den None-Wert trotzdem instanziieren, Listen erzeugen, die unterschiedlich viele Nones enthalten und so weiter. Hier noch meine Lösungen zu den Aufgaben (nicht ausführlich getestet):
    def anzahl_gerade(l):
    return reduce(lambda x,_: 1 + x, filter(lambda x: x%2==0, l), 0)
    def mein_filter(f, l):
    return reduce(lambda x,y: x + [y] if f(y) else x, l, [])
    def curry(f, *args):
    return lambda *urgs: f(*args+urgs)

  • @thorstenwidmer7275
    @thorstenwidmer7275 Před 3 lety +1

    Sehr gut erklärt -> Lob

  • @bensteyn8420
    @bensteyn8420 Před rokem

    5 Kochmützen ... von jemdandem, der im MINT-Studium in den 80/90igern in Pacal/ Turboascal programmiert hat!!!
    Objektorientierte Programierung! Damals der Speicherknappheit vs Adressraum geschuldet.
    Overlay Programmierung, weil nicht alles in den Hauptspeicher gepaßt hat.
    Oh Mann, haben wir uns gequält ....
    Freut mich sehr, daß jemand auf solch nette Weise dbzgl. hier auftritt.
    Vielleicht sollte ich wieder anfangen ....

    • @WCiossek
      @WCiossek Před 10 měsíci

      Das hatten wir den sehr beschränkten Bill Gates zu verdanken, der immer sehr kleinlich gedacht hatte. Ich denke nur an das Extended Memory, wobei ein kleines Häppchen (64k) davon eingeblendet werden konnte, weil das msdos etwas anderes nicht zulies. So schaufelten wir mühsam im Speicherraum umher, um an den bereits vorhandenen Speicherplatz von ein Megabyte zu kommen. Mit Windows schmissen die Bill-Gates-Enthusiasten ihr Geld wirklich zum Windows hinaus und wer damit programmierte, hatte selbst schuld, wenn eine Pleitewelle dadurch verursacht wurde. Dank Linux wurde diese Speicherschinderei endlich aufgehoben.

  • @lukasschmitt3075
    @lukasschmitt3075 Před 3 lety +1

    Sehr schönes Video. Schreibe zur Zeit meine Seminararbeit über F# und Multiparadigmensprachen und auch wenn ich die hier angesprochenen Themen bereits kannte war es doch schön sie nochmal zu hören.
    Hier meine Lösung in F#, wobei das mit der curry funktion irgendwie komisch aussieht - hab ich da was verpasst oder liegt das einfach daran das F# ja bereits eine functional-first programming language ist?
    let anzahlgerade li =
    li |> List.filter (fun x -> x%2 = 0) |> List.fold (fun s x -> s + 1) 0
    let meinFilter predicate list =
    list |> List.fold (fun s x -> if predicate x then s @ [x] else s ) []
    let curry func para =
    func para

  • @reaper6558
    @reaper6558 Před 2 lety

    Danke für das Video, so konnte ich gut lernen, wie das ganze in Python funktioniert. Hab das ganze mal auch in Python programmiert inklusive reduce bei der letzten Funktion:
    import functools
    def my_equal(xs: list) -> int:
    return functools.reduce(lambda x1, x2: x1 + 1 , filter( lambda x: x % 2 == 0, xs), 0)
    def list_equal(xs: list) -> list:
    return len([x for x in xs if x % 2 == 0])
    def test(x: int, y: int, z: int) -> int:
    return x + y + z
    def curry(fun, *args):
    return lambda *inner: fun(*args, *inner)
    def my_filter(fun, xs: list) -> list:
    return list(functools.reduce(lambda acc, x2: acc + [x2] if fun(x2) else acc , xs, []))

  • @cynocephalusw
    @cynocephalusw Před 3 lety

    Am interessantesten finde ich Idris. Durch das Konzept der Dependent Types stehen einem ungeahnte Möglichkeiten offen. Peter Caisse hat 2019 einen interessanten Aufsatz veröffentlicht: „The Power of Types“. Darin zeigt er, dass es nicht mehr notwendig ist, aufwendige Tests zu fahren, sondern dass der Typ selbst zur Demonstration der Fehlerlosigkeit ausreicht. Der Compiler kann einen sogar zur richtigen Implementierung führen.

  • @toasti2211
    @toasti2211 Před 2 lety

    Toll Toll, Dankeschön

  • @mephistosson
    @mephistosson Před 2 lety

    Vielen Dank!

  • @Anon48657
    @Anon48657 Před 3 lety

    Weiter so!

  • @TheCookieLPT
    @TheCookieLPT Před 3 lety +6

    Spoiler (evtl. Lösungen zu den Übungsaufgaben):
    Falls jemand Erfahrung mit Python hat (hab ich leider nicht): Bei mein_curry und mein_filter würde mich interessieren, welche Datentypen die Parameter haben sollen denn ich habe keine dazugeschrieben. Außerdem bräuchte mein_curry wahrscheinlich noch einen Rückgabewert, aber ich bin mir nicht sicher, welchen. Es funktioniert zwar, aber ganz sauber glaube ich ist das nicht, wenn ich die Datentypen auslasse.
    Außerdem habe ich die Einschränkungen nicht eingehalten wie im Video erwähnt, ich hätte das Video zuerst zu Ende schauen sollen.
    def anzahl_gerade(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    # Für die Curry Funktion
    def summe(x: int, y: int, z: int) -> int:
    return x + y + z
    def mein_curry(func, val):
    return lambda x, y: func(val, x, y)
    def mein_filter(y, xs: list) -> list:
    return [x for x in xs if y(x)]

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 3 lety +4

      Typisierung ist bei größeren Softwareprojekten echt wichtig. Bei kleineren Python scripts wird es oft weggelassen. Im Video schreibe ich die Typen hauptsächlich für die bessere Verständlichkeit dazu. Für Funktionen kannst du Callable nehmen, wie ich es auch im Video gemacht habe. Für ein beliebiges Argument geht z.B. Any.

  • @lucarudloff687
    @lucarudloff687 Před 3 lety +2

    Welches Editoren-Programm nutzt du da am Anfang als du erklärst?😅 Bin noch komplett neu im Bereich Programmieren und komplett verwirrt irgendwie...

  • @luigi.8868
    @luigi.8868 Před 2 lety

    Hi, mich würde interessieren, wenn das Gegenteil zur funktionalen, die imperative ist, wo ordnet man dann deklarativ und prozedural ein?

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut Před 3 lety +1

    Hast Du schon Mal mit Julia Lang programmiert?
    Da kannst Du sowas wie
    for f in (
    +,
    *,
    /,
    -,
    ^,
    function(a,b) a*b+b^a end
    )
    println(f(10,5))
    end
    machen.

  • @danielhundhausen3187
    @danielhundhausen3187 Před 4 lety +5

    Hammer Video und starke Erklärungen! Ich studiere Physik und kann auch ohne Info-Background gut folgen. Gruß aus Hamburg!
    Spoiler Alert!!
    .
    .
    .
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1,x2: x1+1, filter(lambda x: x%2 == 0, xs), 0)
    def curry(f: Callable, k: int) -> Callable:
    return lambda *args: f(k, *args)
    def mein_filter(f: Callable, xs: list) -> list:
    return [x for x in xs if f(x) is True]
    (Die dritte Lösung leider ohne reduce)

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +5

      Sehr cool! Und gute Lösungen! Um die dritte Aufgabe mit reduce zu lösen, muss man realisieren, dass reduce mit jeder beliebigen Funktion bzw. jedem Datentyp arbeiten kann, nicht nur mit Integer-Funktionen. Aber in der Praxis ist deine Lösung mit der List Comprehension ja sowieso besser!
      Ich habe viele Physikerfreunde und freue mich, dass die Videos auch dir als Nichtinformatiker einen Mehrwert bringen. Gruß aus London!

    • @clemens6440
      @clemens6440 Před 3 lety +2

      Spoiler - Die dritte Aufgabe nochmal in Python und mithilfe von reduce:
      .
      .
      .
      def mein_filter(f: Callable, xs : list) -> list:
      return reduce( lambda a,b : a+[b] if f(b) else a, xs, [])
      Gruß aus Hamburg :)

  • @timefc
    @timefc Před 4 lety +15

    Sehr interessant, finde du machst die Videos echt gut, vor allem weil du gerade erst angefangen hast! Hattest du Vorerfahrung?

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +5

      Na, das freut mich doch! Ich hatte keine Vorerfahrung, bevor ich den Kanal gestartet hab. Musste erst mal lernen, Videos zu schneiden und gut in die Kamera zu sprechen. :)

    • @timefc
      @timefc Před 4 lety +4

      @@NiklasSteenfatt dafür sieht das schon ganz schön professionell aus... Könntest auch schon 5kanäle davor gehabt haben hahaba

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +4

      @@timefc Haha, das ist ja schön! Wie die Videos dann wohl 5 Kanäle später aussehen ...

  • @niklas4389
    @niklas4389 Před 4 lety +1

    Deine Laufbahn ist echt beeindruckend. Respekt.
    Mal eine Frage.
    Ich habe diesen Monat meine Ausbildung zum Fachinformatiker für Systemintegration angefangen. Welche Programmiersprache sollte ich dafür lernen? Ist zwar Nebenbestandteil aber brauch man trotzdem. Phyton oder?
    Was sollte ich sonst noch lernen? Rund um Dinge wie Datenbanken und Netzwerkadministration.
    Wie sieht es mit Zertifizierungen aus? Gibt es da online "Schulen" die Zertifizierungen anbieten? Kenne nur die LPI. Würde aber gerne auch in Richtung Windows gehen, welche Dinge wären da sinnvoll?
    Vielen Dank schonmal!

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +3

      Hey! Erst mal Glückwunsch zum Start in die Ausbildung!!
      Python ist in der Tat die perfekte Allround-Programmiersprache, damit kannst du nichts falsch machen. In der Systemintegration ist bestimmt shell scripting noch ziemlich wichtig. Da würde ich mich auf jeden Fall mal intensiv mit Programmierung in bash (für Linux) bzw. PowerShell (für Windows) auseinandersetzen. Lass Linux übrigens auf keinen Fall außen vor, selbst wenn du eher in die Windows-Richtung gehen willst.
      Grundlagen von Datenbanken sind sicher hilfreich (SQL vs noSQL-Datenbanken, heutzutage vor allem auch verteilte Datenbanken, Hadoop, Presto, Spark, ...). Bei Netzwerk würde ich vor allem erst mal an den Grundlagen arbeiten. Wie funktionieren IP, HTTP, TCP, UDP, DNS, was sind Proxies, wie genau arbeitet ein Router, usw ...
      Ich kenne mich nicht sonderlich mit Zertifizierungen aus. Im Zweifel würde ich denken, dass es am wichtigsten ist, die Themen gut zu beherrschen. Coursera hat aber gute Online-Kurse, zu denen man oft ein Abschlusszertifikat erwerben kann, das kannst du dann in den Lebenslauf packen. www.coursera.org/learn/windows-server-management-security sieht doch z.B. ganz nett aus.
      Viel Erfolg!

    • @MarkusBurrer
      @MarkusBurrer Před 3 lety

      Eine Sprache, die ich dir ans Herz legen würde ist Rust. Der Compiler zwingt dich mehr oder weniger zu einem sauberen Programmierstil und der Compiler hilft dir auch mit guten Fehlermeldungen. Rust in Kombination mit funktionaler Programmierung und du bist für andere Sprachen gut gerüstet.
      Ich gebe zu, dass die Lernkurve ziemlich steil ist, aber ich bin der Meinung, mit Sprachen wie Python oder Java gewöhnt man sich schlechten Programmierstil an.
      Eine andere Sprache, die ich empfehlen würde, ist Elm. Vollständig funktional und mit hilfreichem Compiler.

    • @MarkusBurrer
      @MarkusBurrer Před 3 lety

      Achso, generell möchte ich dir empfehlen, funktionale Programmierung zu lernen, egal welche Sprache du lernst. Das geht auch mit Python, aber weil Python sowas wie immutable variables kennt kommt man leicht in die Versuchung, das Mal zu vergessen.
      Funktionale Programmierung ist deshalb sinnvoll, weil dadurch viele Fehler vermieden werden. Wenn man das Konzept einmal drauf hat kann man immer noch mit OOP oder imperativer Programmierung ergänzen.
      Ich wünschte, ich hätte das vor 20 Jahren gewusst.

    • @thisismyalias
      @thisismyalias Před 3 lety

      @@MarkusBurrer +1 für Rust

    • @MarkusBurrer
      @MarkusBurrer Před 3 lety

      @@thisismyalias es gibt eine Reihe von Sprachen, die ich Python inzwischen vorziehen würde. Ein direkter Ersatz wäre für mich Julia oder F#. Mit F# und VScode kann man etwas ähnliches machen wie mit dem Jupyter Notebook.
      Aber auch wenn man Smartphone Apps mit Kotlin oder Swift programmieren möchte sollte man das Konzept der funktionalen Programmierung zumindest kennen.
      Deshalb halte ich Python immer weniger für die ideale Einsteigersprache, die sie einmal war. Ich würde mittlerweile Elm empfehlen, auch wenn sie "nur" für die Web Entwicklung gedacht ist.

  • @S.Quandt_Filme
    @S.Quandt_Filme Před 3 lety

    Funktioniert das bei Lua scripts auch so ähnlich ?

  • @fabiqn269
    @fabiqn269 Před 4 lety +4

    Wie hast du programmieren gelernt/wie hast du angefangen? Mich interessiert das Programmieren sehr, aber ich weiß nicht wie und wo ich starten soll.

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +8

      Hey Fabi! Das ist eine sehr gute Frage. Persönlich hab ich ein bisschen was im Informatikunterricht an der Schule gelernt, das Wesentliche aber dann erst im Informatikstudium.
      Man kann aber natürlich auch ohne Schule oder Studium programmieren lernen, zum Beispiel mit einem Buch, mit CZcams-Videos, Websites, ...
      Ich glaube, es ist wichtig, sich ein kleines Projekt als Ziel vorzunehmen, damit man nicht einfach nur stumpf irgendwelche Konzepte lernt. Zum Beispiel ein kleines Spiel zu programmieren oder so.
      Ich kann gerne mal ein Video mit etwas ausführlicheren Tipps zum Programmierstart machen!

    • @fabiqn269
      @fabiqn269 Před 4 lety +2

      Niklas Steenfatt vielen Dank für deine Antwort, und ja ein Video wäre super 🙏🏼

    • @jeanpierremayer7557
      @jeanpierremayer7557 Před 3 lety

      @@NiklasSteenfatt Bitte über ein kleines Spiel :)

  • @metox3388
    @metox3388 Před 3 lety

    Gibt es die Beispiele auch als C?

  • @davidak_de
    @davidak_de Před 3 lety +1

    Gut erklärt, danke für das Video!
    Hier meine Lösungen für die Aufgaben:
    from typing import Callable
    from functools import reduce
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: x1 + 1, filter(lambda x: x % 2 == 0, xs), 0)
    print(anzahl_gerade([4, 3, 6, 32, 2, 1, 23, 4]))
    def curry(f: Callable, x: int) -> Callable[[int, int], int]:
    return lambda y, z: f(x, y, z)
    def foo(x: int, y: int, z: int) -> int:
    return x + y + z
    bar = curry(foo, 5)
    print(bar(3, 2))
    def mein_filter(f: Callable, xs: list) -> list:
    return reduce(lambda x1, x2: x1 + [x2] if f(x2) else x1, xs, [])
    print(mein_filter(lambda x: x > 3, [1, 3, 2, 4, 5]))
    Wie ist deine Lösung?

    • @academicalisthenics
      @academicalisthenics Před 3 lety

      danke, die Aufgabe 3 hatte ich mit reduce nicht hinbekommen, deine Lösung hat mir sehr geholfen!

  • @davidak_de
    @davidak_de Před 3 lety

    Könntest du ein Video zu Racket machen?

  • @YouKnowWhoIAm118
    @YouKnowWhoIAm118 Před 2 lety +1

    Bitte mal wieder irgendein Video zu Informatik. Ich würde zum Beispiel Typisierung interessant finden

  • @VISION-IT
    @VISION-IT Před rokem

    Wie lange braucht man u. was muss man tun - um auf das bzw. dein Programmierlevel zu kommen ?
    Ohne Camebridge, Elite Uni u. Co., ist das machbar ... ?

  • @jenniferclock9384
    @jenniferclock9384 Před 3 lety

    nice. ich wollte bssl lernen was eine funktionale sprache ist, da ich mir clojure aneignen will. Danke!

  • @fakecrafter7448
    @fakecrafter7448 Před 3 lety

    was für fonts sind das?

  • @simxschl
    @simxschl Před 3 lety +5

    um zu lernen, wie man funktional programmiert, gibt es 2 Methoden ... gewieft ;)

  • @WCiossek
    @WCiossek Před 10 měsíci

    Ich habe eine Programmiersprache entwickelt, die funktional ist. Allerdings soll es damit auch möglich sein, ein Betriebssystem zu programmieren, wobei eine Speicherverwaltung nötig wird. Das lambda-Kalkül kennt keine arithmetischen Funktionen und keine Zahlen! Es beschreibt nur den Reduktionsvorgang eines Ausdrucks, was passiert, wenn ein Parameter in das Kalkül geschleust wird. Zur Erzeugung von Funktionen ist es unbrauchbar. Die lambda-Ausdrücke in einigen Programmiersprachen wie Python oder Haskell entsprechen nicht dem lambda-Kalkül, sondern sind Erweiterung derselben und müßten als my-Kalkül bezeichnet werden, wenn das lambda-Kalkül um Zahlen und Grundrechenarten erweitert wird. Eine Closure (Einschluß) ist im reinen lambda-Kalkül nicht möglich. Das my-Kalkül basiert auf dem lambda-Kalkül und entspricht dem lambda von Python und Haskell. Beim lambda-Kalkül werden Variablen durch Werte ersetzt. Beim my-Kalkül wird der Wert einer Variable verwendet und eine Ersetzung findet nicht statt. Nur unter diesen Voraussetzungen sind Closure möglich. Allerdings ist eine Zuweisung einer Variable mit einen Wert nicht pur funktional, da es ein Seiteneffekt ist. In funktionalen Programmiersprachen wie Haskell, die nicht rein funktional ist, wie oft behauptet wird, kennt Zuweisungen in Form von Konstanten, d.h. es ist nur eine einmalige Zuweisung möglich. Nun habe ich festgestellt, daß inpure Funktionen (Funktionen ohne Parameter oder Funktionen ohne Ergebnis) funktional verwendet werden können, sofern Seiteneffekte eingekapselt werden, durch Einführung eines weiteren Kalküls (ny-Kalkül), das inpure Funktionen aufnimmt und sich an das my-Kalkül orientiert, das wiederum das lambda-Kalkül zur Grundlage hat. Meine Programmiersprache basiert auf dem lambda-Kalkül und orientiert sich von der Syntax her an die Mengenalgebra. Der Befehlssatz ist in der Voreinstellung lateinisch und kann durch die synonymus-Anweisung in jede beliebige Sprache wie Englisch oder Chinesisch umgewandelt werden. Z.B. {synonymus synonymus:代名词} oder {synonymus scribere:{print, drucke, 打印}}, so daß
    die Anweisung {scribere "Hallo"} als auch {打印 "Hallo"} oder {print "Hallo"} auf der Konsole das Wort Hallo ausgibt. Um diesen Seiteneffekt funktional einzukapseln, muß es das ny-Kalkül verwenden:
    {{ny {x} {scribere x}} "Hallo"}
    daß die inpure Anweisung scribere in eine funktionale Umgebung packt. Analog für funktionale Anweisungen gibt es das my-Kalkül für pure Operatoren z.B.
    {{my {x} {+ x,4}} 3}
    was das Ergebnis 7 liefert. Da die Grundrechenarten eh schon pure Funktionen sind, genügt
    {+ 3,4}

  • @adrianf.5847
    @adrianf.5847 Před 2 lety

    Jetzt mal ne blöde Frage: Sie haben ja in 8:34 die Funktion multipliziere_liste implementiert. Diese hat an sich aber doch keine Seiteneffekte und ist von daher selbst auch funktional, oder? Denn die Variable "ausgabe" ist ja auch an den Scopus von der Funktion gebunden, und wird also nach Beendigung der Funktion aufgelöst.

    • @adrianf.5847
      @adrianf.5847 Před 2 lety

      Also Wikipedia verwendet den Begriff "funktionale Programmierung" eher für das Programmierparadigma, wo Funktionen als Variablen benutzt werden dürfen, wohingegen die Verkapselung von Methoden wie im Video beschrieben eher unter "prozedurales Programmieren" eingeordnet wird.

  • @conrade.4110
    @conrade.4110 Před 3 lety

    Hi Niklas, danke für das tolle Video. Könntest du Mal was machen, dass im Video das Tastatur tippen nicht so laut ist? Dann wäre wirklich perfekt.

  • @khyroz9519
    @khyroz9519 Před 3 lety +19

    Programmierst du immer im Light Mode?
    Davon bekomme ich immer sehr schnell Kopfschmerzen. 😂

  • @dominikscheuer7010
    @dominikscheuer7010 Před 3 lety

    SPOILER!
    def anzahl_gerade(xs: list) -> int:
    return (sum(x % 2 == 0 for x in xs if True))
    def foo(x: int,y:int,z:int) -> int:
    return x * y + z
    def curry(f : function,z: int) -> int:
    return lambda x,y: f(x,y,z)
    def mein_filter(x ,xs: list) -> list[int]:
    return list(filter(x,xs))
    #oder soll es als Ersatz für filter benutzbar sein? xD

  • @axelscheiber9499
    @axelscheiber9499 Před 3 lety

    Meine Lösung für anzahl_gerade: allerdings ohne reduce(), ist mir leider nicht eingefallen =D:
    .
    .
    .
    .
    .
    .
    def anzahl_gerade(xs: list) -> list:
    return list(filter(lambda x: x/2==round(x/2), xs))
    Hat jemand die lösung?

    • @juliak5813
      @juliak5813 Před 3 lety

      Ich habe eine ähnliche Lösung:
      def anzahl_gerade(ls: list):
      return len(list(filter(lambda x: x % 2 == 0, ls)))

  • @orca9469
    @orca9469 Před 3 lety

    Kannst du vielleicht dann auch mal ein Video über C#, C, C++ etc machen (objektorientierte Programmierung)

  • @MarkusBurrer
    @MarkusBurrer Před 3 lety +1

    OOP verliert allerdings immer mehr an Bedeutung weil immer mehr Programmierer merken, dass es eigentlich ziemlicher Käse ist. Speziell Spiele haben mit OOP ein echtes Problem.
    Ich dachte am Anfang auch "boah toll, alles irgendwie logisch", bin aber schnell auf die typischen Probleme gestoßen (zB Diamond Problem).
    Seit einer Weile lerne ich Rust. Insbesondere interessant für den Embedded Bereich

    • @Erik_Fa
      @Erik_Fa Před 3 lety +1

      Ich denke nicht das OOP an Bedeutung verliert. Andere Paradigmen gewinnen nur mehr an Bedeutung, weil sie bestimmte Probleme besser lösen können als die OOP.

    • @valentin6824
      @valentin6824 Před 2 lety

      Also ich stimme dir zwar eigentlich zu, bin aber nicht der Ansicht dass sich die 2 Paradigmen gegenseitig ausschließen...
      Generell hast du aber Recht, in quasi jedem Unternehmen was den Anspruch an sich hat, "qualitativ hochwertigen Code" zu schreiben, wird funktional programmiert.
      Trotzdem sollte man nicht vergessen, man kann auch mit funktionaler Programmierung Code schreiben den keiner mehr lesen / verstehen kann...
      Ich finde sogar dass man "schlechten" Code welcher objektorientiert ist sogar besser lesen kann.

    • @WCiossek
      @WCiossek Před 10 měsíci

      OOP ist im Prinzip nur eine Bündelung von Funktionen, und entspricht einer Funktionsbibliothek, sofern Variablen und Konstanten innerhalb des Bündels nicht zugreifbar d. h. privat sind. Eine Klasse beschreibt dieses Bündel und faßt Funktionen zu einer Kategorie zusammen. Da die Funktionen (auch Methoden oder Nachrichten genannt, wobei die Bezeichnungen wie Schall und Rauch sind) im mathematischen Sinne pur sein können, wird OOP bezüglich dieser Methoden funktional. Nur wird das funktionale Paradigma nicht wie bei Haskell erzwungen.
      Funktionale Programmierung ist bei einer Betriebssystementwicklung wieder hinderlich, da Speicherverwaltungen (Nebeneffekte) und Zustände hier von Bedeutung und auch erforderlich sind. Z.B Fehlerzustand, Wartezustand und Ausführungszustand bei den Prozessen usw..

    • @MarkusBurrer
      @MarkusBurrer Před 10 měsíci

      @@WCiossek OOP wie es heute meistens gelehrt wird hat wenig mit dem zu tun, wie es ursprünglich gedacht war. Wer sich echtes OOP anschauen will muss Smalltalk lernen.
      Das Haskell in der Systemprogrammierung nichts verloren hat ist klar. Aber da kommt jetzt halt Rust ins Spiel und viele der Ideen in Rust haben einen funktionalen Ursprung, auch der Borrow Checker.
      Rust ist zwar eine imperative Sprache, aber es gibt wie gesagt viel Einfluss aus der funktionalen Programmierung und es wurde einiges an OOP Ballast weggelassen.
      Rust ist IMHO ein gutes Beispiel, wohin der Trend bei den Programmiersprachen geht
      Ach ja, wenn man sich die Stackoverflow Umfrage nach den beliebtesten Programmiersprachen anschaut fällt auf, dass die ersten vier oder fünf mehr oder weniger funktionale Sprachen sind

  • @vine2875
    @vine2875 Před 3 lety

    An welcher Uni (in Hamburg) hast du studiert oder hast du garnicht in Hamburg studiert?

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 3 lety +1

      Uni Hamburg

    • @vine2875
      @vine2875 Před 3 lety

      @@NiklasSteenfatt da will ich ab nächstes Jahr auch studieren kannst du diese vom Ruf und dem Studium an sich empfehlen? (Ich frage weil sie in keinem Ranking vorkommt oder dort nirgendwo besonders abschneidet) PS: Vielen Dank für deine tollen Videos😊

  • @Cutrexxx
    @Cutrexxx Před 2 lety

    spoiler für erste Aufgabe mit reduce:
    reduce(lambda a,b: a+1 if b%2==0 else a, numbers, 0)

  • @denisg1208
    @denisg1208 Před 4 lety

    Welche Tastatur benutzt du?

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +2

      Eine Razer BlackWidow Ultimate, die mir seit 2014 treue Dienste leistet!

    • @TottiBln
      @TottiBln Před 3 lety

      Ist das wirklich dein Problem: "Welche Tastatur..." ... das ist eine Tastatur, mit der man gut C++ und Python programmieren kann... aber nicht HTML und JavaScript ;)))

  • @timi-mc1xt
    @timi-mc1xt Před 3 lety

    Hi,
    mit welchem Tastaturlayout arbeitest du lieber, qwertz oder qwerty (aktuell benutzt du qwerty aber bist qwertz gewohnt :D sieht man bei 12:44)

    • @schlingelgen
      @schlingelgen Před 3 lety

      Und warum kann es nicht genau andersherum sein? 🤔

  • @daniels.6534
    @daniels.6534 Před 3 lety +2

    Nach PEP8 ist anzahl_gerade() zwar kein Einzeiler, aber was solls :D
    SPOILER
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: 1 + x1, filter(lambda x: x % 2 == 0, xs), 0)
    def curry(func: Callable[[int], int], k: int):
    return lambda x1, x2: func(k, x1, x2)
    def mein_filter(func: Callable[[int], int], xs: list):
    return list(reduce(lambda x1, x2: x1 + [x2] * func(x2), xs, []))

    • @valentindoring5105
      @valentindoring5105 Před 3 lety

      Wow, die mein_filter Funktion hat es in sich

    • @MoneyPink
      @MoneyPink Před 3 lety

      Die list ganz hinten kann sogar raus, reduce übergibt list :)

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut Před 3 lety +1

    julia> anzahl_gerade(xs) = iseven.(xs) |> count
    anzahl_gerade (generic function with 1 method)
    julia> anzahl_gerade(i for i in 1:10)
    5
    julia> curry(f, x) = (xs...) -> f(x, xs...)
    curry (generic function with 1 method)
    julia> curry(*, 5)(10)
    50
    julia> filter(>(3), [1,2,3,4])
    1-element Array{Int64,1}:
    4
    julia> filter(==(3), [1,2,3,4])
    1-element Array{Int64,1}:
    3
    julia> filter(iseven, [1,2,3,4])
    2-element Array{Int64,1}:
    2
    4

  • @MinecraftWikiDE
    @MinecraftWikiDE Před 3 lety

    Eine Prozedur, Funktion oder Methode unterscheidet sich sehr wohl voneinander und sie drei haben folgende Bedeutung:
    Prozedur: Hat keinen Rückgabewert.
    Funktion: Hat einen Rückgabewert.
    Methode: Ist eine Prozedur oder Funktion innerhalb eines Objektes.
    Mich hat es es ehrlich gesagt etwas gewundert, wieso das nicht aufgeklärt wurde, da das doch ein nicht zu vernachlässigender Unterschied ist!
    Trotz dieser Richtigstellung muss ich auch ein Lob aussprechen, die Qualität, dieses und aller anderen bisher geschauten Videos von dir, ist sehr hoch! Man lernt bei jedem einzelnen Video immer sehr viel tiefgründiges.

    • @ratzepalltuff9617
      @ratzepalltuff9617 Před 3 lety

      nur aus Interesse:
      gelten static methoden dann nicht als methoden, da sie ja innerhalb einer klasse, aber nicht innerhalb eines Objekts sind?

    • @MinecraftWikiDE
      @MinecraftWikiDE Před 3 lety

      @@ratzepalltuff9617 Meines Wissens nach ist ein static für genau den Fall gedacht, damit man wieder von Prozeduren und Funktionen sprechen kann.

    • @WCiossek
      @WCiossek Před 10 měsíci

      Strukturell gesehen ist eine Methode oder auch Nachricht genannt eine Funktion oder Prozedur und somit existiert kein Unterschied! Eine Funktionsbibliothek ist ein Bündel von Funktionen und Prozeduren. Das Gleiche tut eine Klasse unter einen kategorischen Namen, woraus sich Instanzen oder Objekte bilden lassen. In einer Funktionsbibliothek werden ja aus Funktionen oder Prozeduren plötzlich auch nicht Methoden oder Nachrichten! Funktionsbibliotheken und Objekte sind nichts weiteres als Funktionsbündel von zugreifbaren Funktionen! Aus struktureller Sicht sind diese Bezeichnungen wie Schall und Rauch, ähnlich den Variablen im lambda-Kalkül, wobei lambda x.x identisch ist mit lambda y.y.

  • @MrKeKsst
    @MrKeKsst Před 2 lety

    Ich würde sowas in einer besser lesbaren Sprache bevorzugen in der Zukunft, Python ist zwar simpel, aber oft zu simpel und reduziert im gut lesbar zu sein, Go hat das viel besser gelöst.

  • @oscarmeischner6560
    @oscarmeischner6560 Před 3 lety +1

    Fast 50 k.
    ;)

  • @NeuroEverything
    @NeuroEverything Před 4 lety +17

    I think for the first time in my life I wish I understood German

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 4 lety +2

      Haha, I know, it's a shame for all my English-speaking friends! As Oscar Wilde said, life is too short to learn German, so I'm going to make content in English some day, promise.

    • @fentonmsu
      @fentonmsu Před 3 lety

      Deutsch ist sehr einfach zu lernen.

    • @fentonmsu
      @fentonmsu Před 3 lety

      Ich mache Videos auf Deutsch, Russisch sehr schwerer.

  • @LS-cb7lg
    @LS-cb7lg Před 3 lety

    def anzahl_gerade(lst: list) -> int:
    return reduce(lambda x, y: x+y, list(map(lambda x: 1 - x % 2, lst)), 0)
    def curry(fkt, x):
    return lambda y, z: fkt(x, y, z)
    def mein_filter(fkt, lst: list) -> list:
    return list(filter(fkt, lst))
    hab leider nicht geschafft, die anzahl_gerade funktion mit filter zu programmieren, wäre bestimmt sogar einfacher als meine lösung aber naja :D

  • @deadpoolgamer4824
    @deadpoolgamer4824 Před 3 lety

    Ich glaube mein Kopf ist geplatzt 😎✌😅

  • @alicethegrinsecatz1611

    Heute klingst du ähnlich wie der CZcamsr TheJoCraft

  • @Selbstzensur
    @Selbstzensur Před 3 lety +1

    Funktionale Programmierung ist nah am Low Level während Objekt Orientierte Programmierung die Kapselung dessen ist was benötigt wird um eine flüssige Abstraktion mittels generischen Templates in C++ zu erreichen. In anderen Worten mit Funktionaler Programmierung schreibe ich mir mein Verhalten, dass ich bei Bedarf ganz schnell mutiere um mir meine Abstraktionsschicht auf der OOP Ebene. So dass ich mittels K.I. irgendwann den Funktionalen Bereich dynamisch anpasse und die abstraktion erstmal generisch lasse um trotz evolutionärer Annäherung durch nicht deterministische Intelligente Algorithmen trotzdem ein garantiertes Maß an Ergebnissicherheit zu erhalten.

    • @rolandm.2276
      @rolandm.2276 Před 3 lety

      Nope.. Schon das Statement im ersten Satz ist komplett falsch.. FP ist auf Top Level abstrahiert.. Konzepte wie map (Funktoren) flatMap (Monaden) bzw filter und reduce (Katamorphismen) kommen aus der Kategorietheorie.. Du kannst diese höheren Funktionen in jeder Sprache gleich nutzen, wie sie dann Low Lvl implementiert sind, ist dann meist egal.. wenn das Ganze ein Low Lvl wäre, dann würden wir diese Konzepte von einer Sprache in die nächste kaum portieren können. 🤔

  • @mymacaintwag
    @mymacaintwag Před 3 lety +3

    Irgendwie hat sich mein letztes Kommentar verflüchtigt:
    1. “Methoden” werden meist im kontext von Klassen benutzt
    2. Es gibt in Python keine Pointer
    3. Funktional in python ist wegen nicht vorhandener tail call optimization nicht wirklich optimal
    4. Eine while Schleife ist sicherlich konzeptuell kein “Äquivalent” für map.

  • @clownjunge2942
    @clownjunge2942 Před rokem

    Niklas arbeitet mit Windows :D

  • @christianforler1476
    @christianforler1476 Před rokem

    # SPOILER!
    def anzahl_gerade(xs : list) -> int:
    return reduce(lambda a,b : a+1 , filter(lambda x: x&1 == 0, xs) , 0)
    def curry(fn, x, *y):
    return lambda *y: fn(x, *y)
    def mein_filter(fn, xs):
    return list(reduce(lambda a, x: a + [x] if fn(x) else a , xs, []))

  • @fritzbauer5043
    @fritzbauer5043 Před 3 lety

    Ich hätte Informatik studieren sollen :(((

  • @Selbstzensur
    @Selbstzensur Před 3 lety

    Ich war schon immer ein ganz schrecklicher programmierer.

    • @TottiBln
      @TottiBln Před 3 lety +1

      Nach diesem Video wir's auch nicht besser;)... Viele hier glauben, weil sie nach anschauen des Videos nur "Bahnhof" verstanden haben, dass es ein sooo hochwertiger Content ist, aber da ich selbst Kurse gebe, kann ich Dir sagen: lass Dich nicht entmutigen! Dieses Video ist für Anfänger nur verwirrend und ungeeignet Es dient in erster Linie der narzisstischen Befriedigung des Machers nach Klugscheisserei und Anerkennung!

  • @vast634
    @vast634 Před 2 lety

    Da bleib ich lieber bei der klassischen Java Syntax, als diesem unübersichtlichen Lamda Quatsch.

  • @nameunknown3272
    @nameunknown3272 Před 3 lety +2

    Viel zu viel auf einmal, wenn man dieses Video ohne Vorwissen schaut, versteht man gar nichts

    • @NiklasSteenfatt
      @NiklasSteenfatt  Před 3 lety +7

      Hey, danke für das wertvolle Feedback! Du hast recht, das Video ist eine Einführung in die funktionale Programmierung, aber man muss schon etwas programmieren können, um es zu verstehen. Die meisten meiner Zuschauer beschäftigen sich ja schon etwas mit Informatik. Aber ich kann gerne auch mal eine Einführung in die Programmierung machen, für absolute Anfänger! :)

    • @valentinn3507
      @valentinn3507 Před 3 lety

      @@NiklasSteenfatt ja das wäre toll! Obwohl es da schon einige Videos auf YT gibt. Vielleicht mit eigenem Twist

  • @hgdesign3674
    @hgdesign3674 Před 2 lety

    Sehr geiles Video!
    Habe mit dem Thema funktionale Programmierung noch nicht viel zu tun gehabt aber habe mich mal an der ersten Aufgabe versucht
    !!SPOILER!!
    def anzahl_grade(xs: list) -> list:
    return reduce(lambda x1, x2: x1 + x2/x2, list(filter ( lambda x: x % 2, xs)), 0)
    Feedback wäre echt klasse :)

  • @BUE687
    @BUE687 Před 3 lety

    Da
    def anzahl_gerade(l):
    return reduce(lambda x, y: x + 1, filter(lambda x: x % 2 == 0, l), 0)
    def curry(f, x):
    return (lambda *args: f(x, *args))
    def mein_filter(f, l):
    return reduce(lambda x, y: x + [y] if f(y) else x, l, list())