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

Поделиться
HTML-код
  • Опубликовано: 17 янв 2025

Комментарии • 177

  • @NiklasSteenfatt
    @NiklasSteenfatt  Год назад +11

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

  • @tracetv8115
    @tracetv8115 4 года назад +20

    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!

  • @alinivan151
    @alinivan151 4 года назад +45

    Sehr guter, qualitativ Hochwertiger Content. Vielen Dank!

  • @lukasschmahl147
    @lukasschmahl147 2 года назад +1

    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!

  • @NiklasSteenfatt
    @NiklasSteenfatt  4 года назад +32

    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!

  • @fentonmsu
    @fentonmsu 4 года назад +71

    Endlich jemand, der richtiges Deutsch spricht.

  • @memorial2k8
    @memorial2k8 4 года назад +3

    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

  • @heinrichschiller4673
    @heinrichschiller4673 4 года назад +9

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

  • @chikken007
    @chikken007 4 года назад +5

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

  • @businessparis9364
    @businessparis9364 4 года назад +13

    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  4 года назад +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. :)

  • @greenstargaming4745
    @greenstargaming4745 3 года назад +1

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

  • @entropy1088
    @entropy1088 2 года назад +1

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

  • @bendikarbogast1229
    @bendikarbogast1229 4 года назад +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, [])

  • @vizenzovin
    @vizenzovin 9 месяцев назад

    beste Video über funktionale Programmierung

  • @maestro4704
    @maestro4704 3 года назад

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

  • @rp8133
    @rp8133 4 года назад +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.

  • @ivanbal
    @ivanbal Год назад

    Eines Deiner besten Videos Niklas!

  • @Himmelskastelan
    @Himmelskastelan 4 года назад +1

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

  • @flo_xd8702
    @flo_xd8702 4 года назад +1

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

  • @louispetrik7431
    @louispetrik7431 4 года назад +5

    Großartig, weiter so!

  • @stefan_blohm
    @stefan_blohm 3 года назад

    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!

  • @timefc
    @timefc 4 года назад +15

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

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +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 4 года назад +4

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

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +4

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

  • @pawel_guzewicz
    @pawel_guzewicz 4 года назад +10

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

  • @kologitzi
    @kologitzi Год назад

    Sehr hilfreich, danke.

  • @easypy
    @easypy 2 года назад

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

    • @tomdriver6733
      @tomdriver6733 Год назад

      Python ist leider eine sehr lahme Programmiersprache.

  • @TheKeule33
    @TheKeule33 4 года назад

    Du erklärst gut.

  • @zoepietrzak6108
    @zoepietrzak6108 10 месяцев назад

    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 😊

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 года назад +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

  • @thorstenwidmer7275
    @thorstenwidmer7275 4 года назад +1

    Sehr gut erklärt -> Lob

  • @xentox5016
    @xentox5016 4 года назад

    Meega gut erklärt, danke!

  • @fabiqn269
    @fabiqn269 4 года назад +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  4 года назад +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 RUclips-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 4 года назад +2

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

    • @jeanpierremayer7557
      @jeanpierremayer7557 4 года назад

      @@NiklasSteenfatt Bitte über ein kleines Spiel :)

  • @adrianf.5847
    @adrianf.5847 3 года назад

    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 3 года назад

      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.

  • @luccasangpur6527
    @luccasangpur6527 4 года назад

    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 RUclips.
    **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 , [ ] )

  • @TheCookieLPT
    @TheCookieLPT 4 года назад +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  4 года назад +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.

  • @god_is_great_antifa
    @god_is_great_antifa 4 года назад +3

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

  • @luca368-y6q
    @luca368-y6q 4 года назад +2

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

  • @mag8101
    @mag8101 3 года назад

    Mega Video! Danke :)

  • @reaper6558
    @reaper6558 3 года назад

    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, []))

  • @christiandietz7480
    @christiandietz7480 3 года назад

    geiles Video...weiter so!

  • @lukasschmitt3075
    @lukasschmitt3075 4 года назад +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

  • @ayoko5161
    @ayoko5161 3 месяца назад

    Danke für das Video. Anbei ein Beispiel in der Programmiersprache C#:
    SPOILER
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    public static class FunctionalProgrammingTasks
    {
    // Curry-Beispiel
    public static Func TimesX(int x) => y => x * y;
    // Aufgaben
    public static int CountEven(IEnumerable numbers) => numbers.Where(num => num % 2 == 0).Aggregate(0, (count, num) => count + 1);
    public static Func Curry(Func function, int x) => (y, z) => function(x, y, z);
    public static IEnumerable MyFilter(Func predicate, IEnumerable list) => list.Aggregate([], (a, b) => predicate(b) ? a.Concat([b]) : a).ToArray();
    // Testfunktion für die Curry-Funktion
    public static int Foo(int x, int y, int z) => x + y + z;
    public static void Test()
    {
    // Curry-Beispiel
    var TimesTwo = TimesX(2);
    var TimesThree = TimesX(3);
    Console.WriteLine(TimesTwo(10));
    Console.WriteLine(TimesThree(20));
    // Aufgaben
    Console.WriteLine(CountEven([4, 3, 6, 32, 2, 1, 23, 4]));
    var bar = Curry(Foo, 5);
    Console.WriteLine(bar(3, 20));
    Console.WriteLine("[" + string.Join(", ", MyFilter(x => x > 3, [1, 3, 2, 4, 5])) + "]");
    }
    }

  • @baris1513
    @baris1513 3 года назад

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

  • @tacoletal
    @tacoletal 4 года назад +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  4 года назад +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 4 года назад +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 :)

  • @anthonye2990
    @anthonye2990 3 года назад

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

  • @markuswagner7816
    @markuswagner7816 4 года назад

    Richtiger guter Content!!

  • @toasti2211
    @toasti2211 2 года назад

    Toll Toll, Dankeschön

  • @bensteyn8420
    @bensteyn8420 Год назад

    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 Год назад

      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.

  • @cgsman1
    @cgsman1 3 года назад +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 Год назад +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‼

  • @SkrtlIl
    @SkrtlIl 4 года назад

    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.

  • @mephistosson
    @mephistosson 2 года назад

    Vielen Dank!

  • @niklas4389
    @niklas4389 4 года назад +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  4 года назад +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 4 года назад

      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 4 года назад

      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 4 года назад

      @@MarkusBurrer +1 für Rust

    • @MarkusBurrer
      @MarkusBurrer 4 года назад

      @@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.

  • @cynocephalusw
    @cynocephalusw 4 года назад

    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.

  • @SirLasterOfDesaster
    @SirLasterOfDesaster 4 года назад

    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

  • @TheTimboo16
    @TheTimboo16 4 года назад

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

  • @the_master_of_cramp
    @the_master_of_cramp 4 года назад

    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.

  • @michaelb7829
    @michaelb7829 Месяц назад

    Hi @Niklas, es gab doch mal ein Video von dir über Lambdas und funktionale Programmierung in ***Java***. Existiert das noch?

  • @okdoomer620
    @okdoomer620 4 года назад +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)

  • @khyroz9519
    @khyroz9519 4 года назад +19

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

  • @simxschl
    @simxschl 4 года назад +5

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

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 года назад +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.

  • @davidak_de
    @davidak_de 4 года назад

    Könntest du ein Video zu Racket machen?

  • @VISION-IT
    @VISION-IT 2 года назад

    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 ... ?

  • @YouKnowWhoIAm118
    @YouKnowWhoIAm118 2 года назад +1

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

  • @luigi.8868
    @luigi.8868 3 года назад

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

  • @metox3388
    @metox3388 4 года назад

    Gibt es die Beispiele auch als C?

  • @davidak_de
    @davidak_de 4 года назад +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 3 года назад

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

  • @denisg1208
    @denisg1208 4 года назад

    Welche Tastatur benutzt du?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +2

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

    • @TottiBln
      @TottiBln 4 года назад

      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 ;)))

  • @Anon48657
    @Anon48657 4 года назад

    Weiter so!

  • @S.Quandt_Filme
    @S.Quandt_Filme 3 года назад

    Funktioniert das bei Lua scripts auch so ähnlich ?

  • @MarkusBurrer
    @MarkusBurrer 4 года назад +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 3 года назад +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 2 года назад

      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 Год назад

      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 Год назад

      @@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

  • @orca9469
    @orca9469 3 года назад

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

    • @tomdriver6733
      @tomdriver6733 Год назад

      Das würde mich auch interessierren.

  • @vine2875
    @vine2875 4 года назад

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

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +1

      Uni Hamburg

    • @vine2875
      @vine2875 4 года назад

      @@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😊

  • @jenniferclock9384
    @jenniferclock9384 3 года назад

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

  • @timi-mc1xt
    @timi-mc1xt 4 года назад

    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 4 года назад

      Und warum kann es nicht genau andersherum sein? 🤔

  • @sebreb3359
    @sebreb3359 Месяц назад

    las mich raten, wir brauchen funktionen?

  • @WCiossek
    @WCiossek Год назад

    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}

  • @fakecrafter7448
    @fakecrafter7448 3 года назад

    was für fonts sind das?

  • @NeuroEverything
    @NeuroEverything 4 года назад +17

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

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +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 4 года назад

      Deutsch ist sehr einfach zu lernen.

    • @fentonmsu
      @fentonmsu 4 года назад

      Ich mache Videos auf Deutsch, Russisch sehr schwerer.

  • @dominikscheuer7010
    @dominikscheuer7010 3 года назад

    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

  • @Cutrexxx
    @Cutrexxx 3 года назад

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

  • @MinecraftWikiDE
    @MinecraftWikiDE 4 года назад

    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 4 года назад

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

    • @MinecraftWikiDE
      @MinecraftWikiDE 4 года назад

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

    • @WCiossek
      @WCiossek Год назад

      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.

  • @conrade.4110
    @conrade.4110 4 года назад

    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.

  • @daniels.6534
    @daniels.6534 4 года назад +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 3 года назад

      Wow, die mein_filter Funktion hat es in sich

    • @MoneyPink
      @MoneyPink 3 года назад

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

  • @axelscheiber9499
    @axelscheiber9499 4 года назад

    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 4 года назад

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

  • @MrKeKsst
    @MrKeKsst 2 года назад

    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.

  • @LS-cb7lg
    @LS-cb7lg 3 года назад

    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

  • @winstomsmith7121
    @winstomsmith7121 2 месяца назад

    Ist ja eigentlich gut das Video, aber das Klackern der Tastatur ist grauenhaft. Wenn ich das mit Kopfhörer höre, erzeugt jeder Tastenanschlag Schmerzen im Ohr. Ansonsten aber toll.

  • @religionOFnature
    @religionOFnature 4 месяца назад

    Meine Projektidee wäre ein selbst ausgedachtes Brettspiel mit möglichst einfache Grafik zu programmieren.

  • @homosuperior1337
    @homosuperior1337 4 года назад +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 4 года назад

      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. 🤔

  • @deadpoolgamer4824
    @deadpoolgamer4824 3 года назад

    Ich glaube mein Kopf ist geplatzt 😎✌😅

  • @christianforler1476
    @christianforler1476 Год назад

    # 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, []))

  • @mymacaintwag
    @mymacaintwag 4 года назад +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.

  • @alicethegrinsecatz1611
    @alicethegrinsecatz1611 4 года назад

    Heute klingst du ähnlich wie der RUclipsr TheJoCraft

  • @fritzbauer5043
    @fritzbauer5043 3 года назад

    Ich hätte Informatik studieren sollen :(((

  • @clownjunge2942
    @clownjunge2942 2 года назад

    Niklas arbeitet mit Windows :D

  • @homosuperior1337
    @homosuperior1337 4 года назад

    Ich war schon immer ein ganz schrecklicher programmierer.

    • @TottiBln
      @TottiBln 4 года назад +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 3 года назад

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

  • @nameunknown3272
    @nameunknown3272 4 года назад +2

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

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 года назад +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 4 года назад

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

  • @hgdesign3674
    @hgdesign3674 2 года назад

    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 3 года назад

    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())