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

  Рет қаралды 128,246

Niklas Steenfatt

Niklas Steenfatt

Күн бұрын

💠 Mein komplettes Produktivitätssystem: fokus.so
Funktionale Programmierung ist ein Programmierparadigma, das in der modernen Softwareentwicklung eine wichtige Rolle spielt. Es ermöglicht uns, eleganten, zustandslosen Code zu schreiben, der im Vergleich zur klassisch imperativen Programmierung oft einfacher zu interpretieren, testen und parallelisieren ist. Funktionale Programmierung ist kein Ersatz für objektorientierte Programmierung, sondern eine wichtige Ergänzung.
In meinen Studentenzeiten habe ich funktionale Programmierung als Übungsleiter an der Universität unterrichtet. Als Softwareentwickler in der Industrie kommen mir die Konzepte aus der funktionalen Programmierung regelmäßig zugute.
In dieser Einführung erkläre ich anhand von praktischen Beispielen in Python (und Java), was funktionale Programmierung ausmacht, welche Vorteile sie hat, und wie man funktionale Programme in der Praxis schreibt.
Ich setze lediglich ein Grundverständnis imperativer Programmierung (Zuweisungen, Schleifen, usw.) voraus. Ich behandle insbesondere Seiteneffekte, Closures, Lambda-Funktionen und Funktionen höherer Ordnung: map, filter, reduce und curry. Als Bonus zeige ich, wie man mit Python List Comprehensions besonders schönen funktionalen Code schreiben kann.
Zum Abschluss gebe ich drei Übungsaufgaben:
1) anzahl_gerade (mittels reduce und filter)
2) curry
3) mein_filter (mittels reduce)
Schreib gerne einen Kommentar mit deiner Lösung! Am liebsten mit etwas Platz davor, damit es nicht gleich allen angezeigt wird.
📢 Zuschauerumfrage: forms.gle/p8xZt3Ag2LYZGewq9
💌 Newsletter: niklassteenfatt.com/
Die Folien in diesem Video habe ich mit excalidraw.com erstellt.
Quelle für das Bild von Haskell Curry: commons.wikimedia.org/wiki/Fi...
▬ Timestamps ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
0:00 - Intro
0:33 - Programmierparadigmen
2:18 - Gegenbeispiel: Seiteneffekte
4:37 - Sortieren in Python: funktional vs imperativ
5:58 - Vorzüge funktionaler Programmierung
8:09 - Funktionen höherer Ordnung
8:34 - Vorstellung des Anwendungsbeispiels
9:20 - Closures
12:28 - Map
14:09 - Lambda-Funktionen
16:30 - Currying
17:35 - Filter
18:41 - Reduce
20:10 - List Comprehensions
21:53 - Beispiele in Java
22:12 - Übungsaufgaben
Jetzt deine Ziele erreichen: fokus.so

Пікірлер: 173
@NiklasSteenfatt
@NiklasSteenfatt 6 ай бұрын
Wer guckt das Video noch in 2023? Ich habe inzwischen übrigens mein komplettes Produktivitätssystem veröffentlicht: fokus.so
@jurgenrothenberg8428
@jurgenrothenberg8428 5 ай бұрын
Ich, bin gerade dabei Dich kennen zu lernen. Einfach Supi wie Du den Kontent rüber zu bringen 🎆🎆🎆
@abdullahsarwar2549
@abdullahsarwar2549 4 ай бұрын
2024 hier
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
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!
@tracetv8115
@tracetv8115 3 жыл бұрын
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 3 жыл бұрын
Sehr guter, qualitativ Hochwertiger Content. Vielen Dank!
@memorial2k8
@memorial2k8 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
@fentonmsu
@fentonmsu 3 жыл бұрын
Endlich jemand, der richtiges Deutsch spricht.
@dergideon5301
@dergideon5301 3 жыл бұрын
@TK KT ja
@spicemelange418
@spicemelange418 3 жыл бұрын
Wer spricht keins ?
@multiarray2320
@multiarray2320 Жыл бұрын
@@spicemelange418 deine mudda wenn sie mir nen blowi gibt
@lukasschmahl147
@lukasschmahl147 Жыл бұрын
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 3 жыл бұрын
Ich, als Python nicht Programmierer, habe dein Video tatsächlich verstanden. Also sehr gut erklärt!
@vizenzovin
@vizenzovin Ай бұрын
beste Video über funktionale Programmierung
@chikken007
@chikken007 3 жыл бұрын
Sehr gutes Video. Klar strukturiert und formuliert. Gute Einführung in die Grundkonzepte. Danke ;)
@oscarmeischner6560
@oscarmeischner6560 3 жыл бұрын
Ich finde das Anki- und Cambridgevideo am besten. Weiter so💪👍
@rp8133
@rp8133 3 жыл бұрын
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.
@greenstargaming4745
@greenstargaming4745 3 жыл бұрын
Könnte stundelang einfach nur zuhören, toll erklärt :)
@maestro4704
@maestro4704 3 жыл бұрын
Das Video ist echt klasse! Danke für das teilen deines Wissens.
@entropy1088
@entropy1088 2 жыл бұрын
Echt gutes Video! Deine Stimmlage und Sprachweise --> super
@zoepietrzak6108
@zoepietrzak6108 3 ай бұрын
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 😊
@flo_xd8702
@flo_xd8702 3 жыл бұрын
Respekt ! das hat mir sehr geholfen ich danke dir für das mega Video ich hoffe du machst weiter so 👍
@bendikarbogast1229
@bendikarbogast1229 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, [])
@Projekt108
@Projekt108 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!
@ivanbal
@ivanbal 8 ай бұрын
Eines Deiner besten Videos Niklas!
@Himmelskastelan
@Himmelskastelan 3 жыл бұрын
Ja so ein Video über Rekursionen wäre schon echt nett. Das bereitet mir so einiges Kopfzerbrechen.
@businessparis9364
@businessparis9364 3 жыл бұрын
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 3 жыл бұрын
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. :)
@xentox5016
@xentox5016 3 жыл бұрын
Meega gut erklärt, danke!
@TheKeule33
@TheKeule33 3 жыл бұрын
Du erklärst gut.
@pawel_guzewicz
@pawel_guzewicz 3 жыл бұрын
Really cool stuff! I learnt function currying with Haskell. We used to call functions with missing parameters "unfed" functions.
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
I like that!
@luccasangpur6527
@luccasangpur6527 3 жыл бұрын
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 KZfaq. **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 , [ ] )
@louispetrik7431
@louispetrik7431 3 жыл бұрын
Großartig, weiter so!
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
Danke schön, lieber Louis!
@mag8101
@mag8101 3 жыл бұрын
Mega Video! Danke :)
@kologitzi
@kologitzi Жыл бұрын
Sehr hilfreich, danke.
@markuswagner7816
@markuswagner7816 3 жыл бұрын
Richtiger guter Content!!
@SkrtlIl
@SkrtlIl 3 жыл бұрын
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.
@anthonye2990
@anthonye2990 3 жыл бұрын
Super Video. Ich würde mich über ein paar Büchertips freuen zum Thema.
@SirLasterOfDesaster
@SirLasterOfDesaster 3 жыл бұрын
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
@baris1513
@baris1513 3 жыл бұрын
sehr interessant, ich bin nur leider noch nicht so weit in python. Aber hopefully bald dann komm ich hier nochmal her :)
@easypy
@easypy 2 жыл бұрын
Wünsche mir gerne mehr von dir zum Thema Python :)
@tomdriver6733
@tomdriver6733 Жыл бұрын
Python ist leider eine sehr lahme Programmiersprache.
@christiandietz7480
@christiandietz7480 2 жыл бұрын
geiles Video...weiter so!
@cgsman1
@cgsman1 3 жыл бұрын
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 9 ай бұрын
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 3 жыл бұрын
Super Video! Könntest du noch ein Video speziell zu Funktoren und Monaden machen bitte?
@lukasschmitt3075
@lukasschmitt3075 3 жыл бұрын
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
@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 8 ай бұрын
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.
@thorstenwidmer7275
@thorstenwidmer7275 3 жыл бұрын
Sehr gut erklärt -> Lob
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
Netter Kommentar -> Dank
@mephistosson
@mephistosson 2 жыл бұрын
Vielen Dank!
@the_master_of_cramp
@the_master_of_cramp 3 жыл бұрын
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.
@reaper6558
@reaper6558 2 жыл бұрын
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, []))
@toasti2211
@toasti2211 2 жыл бұрын
Toll Toll, Dankeschön
@luigi.8868
@luigi.8868 2 жыл бұрын
Hi, mich würde interessieren, wenn das Gegenteil zur funktionalen, die imperative ist, wo ordnet man dann deklarativ und prozedural ein?
@lucarudloff687
@lucarudloff687 3 жыл бұрын
Welches Editoren-Programm nutzt du da am Anfang als du erklärst?😅 Bin noch komplett neu im Bereich Programmieren und komplett verwirrt irgendwie...
@_fliegenklatsche9001
@_fliegenklatsche9001 3 жыл бұрын
Sieht aus wie PyCharm von Jetbrains
@lXoT1mUpLsyGeeZdguWl20gT
@lXoT1mUpLsyGeeZdguWl20gT 3 жыл бұрын
Wer es noch nicht kennt sollte sich einmal "Scala" ansehen. Damit kann man z.B. so etwas schreiben: List(1,2,3,4,5) multi(2) add(-2) sum // Ergebnis: 20 List(1,2,3,4,5) anzahlGerade // Ergebnis: 2 List(1,2,3,4,5) meinFilter // Ergebnis: List(4, 5) "List" ist eine vordefinierte Datenstruktur der Scala Collection. Die Funktion "sum" ist schon eingebaut. Die Funktionen "multi" und "add" muss man "nachrüsten", d.h. man kann die Sprache nach belieben erweitern! Wie geht das? Man stellt dem Compiler eine Klasse zur Verfügung, welche die Funktionen als Methoden enthält und mit einer Liste "umgehen" kann: class EnhList(val xs: List[Int]) { def multi(x: Int) = xs.map(_ * x) def add(x: Int) = xs.map(_ + x) def anzahlGerade = xs count(_ % 2 == 0) def anzahlUnGerade = xs count(_ % 2 == 1) def meinFilter = xs map(n => if (n > 3) Some(n) else None) flatten } Dann muss man nur noch dem Compiler einen Weg bauen, durch den er die Methoden der Klasse für die Liste verwenden kann. Dazu wird eine Umwandelfunktion im aktuellen Kontext bekannt gemacht: import scala.language.implicitConversions implicit def listToEnhList(xs: List[Int]) = new EnhList(xs) Der Scala-Compiler ist sehr "schlau". Semikolon am Zeilenende? Nicht mehr nötig! Er erzeugt Byte-Code für die Java-Virtual-Maschine, genau wie Java. Mal online "reinschnuppern" geht unter: scastie.scala-lang.org/ oder scastie.scala-lang.org/ Weiterhin steht mit Scala.js (www.scala-js.org/) eine Art Crosscompiler zur Verfügung. Man programmiert in der gewohnten Sprache und erhält als Ergebnis der Kompilierung eine Javascript-Datei, die z.B. im Browser ablauffähig ist! Aber Vorsicht! Nachdem ich Scala kennen gelernt hatte, wollte ich nie wieder eine einzige Zeile Java-Code schreiben!
@timefc
@timefc 3 жыл бұрын
Sehr interessant, finde du machst die Videos echt gut, vor allem weil du gerade erst angefangen hast! Hattest du Vorerfahrung?
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
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 3 жыл бұрын
@@NiklasSteenfatt dafür sieht das schon ganz schön professionell aus... Könntest auch schon 5kanäle davor gehabt haben hahaba
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
@@timefc Haha, das ist ja schön! Wie die Videos dann wohl 5 Kanäle später aussehen ...
@cynocephalusw
@cynocephalusw 3 жыл бұрын
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.
@okdoomer620
@okdoomer620 3 жыл бұрын
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)
@S.Quandt_Filme
@S.Quandt_Filme 3 жыл бұрын
Funktioniert das bei Lua scripts auch so ähnlich ?
@VISION-IT
@VISION-IT Жыл бұрын
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 ... ?
@niklas4389
@niklas4389 3 жыл бұрын
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 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 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@MarkusBurrer +1 für Rust
@MarkusBurrer
@MarkusBurrer 3 жыл бұрын
@@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.
@L4rsTrysToMakeTut
@L4rsTrysToMakeTut 3 жыл бұрын
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.
@fabiqn269
@fabiqn269 3 жыл бұрын
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 3 жыл бұрын
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 KZfaq-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 3 жыл бұрын
Niklas Steenfatt vielen Dank für deine Antwort, und ja ein Video wäre super 🙏🏼
@jeanpierremayer7557
@jeanpierremayer7557 3 жыл бұрын
@@NiklasSteenfatt Bitte über ein kleines Spiel :)
@Anon48657
@Anon48657 3 жыл бұрын
Weiter so!
@TheCookieLPT
@TheCookieLPT 3 жыл бұрын
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 3 жыл бұрын
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.
@metox3388
@metox3388 3 жыл бұрын
Gibt es die Beispiele auch als C?
@danielhundhausen3187
@danielhundhausen3187 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
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 :)
@simxschl
@simxschl 3 жыл бұрын
um zu lernen, wie man funktional programmiert, gibt es 2 Methoden ... gewieft ;)
@davidak_de
@davidak_de 3 жыл бұрын
Könntest du ein Video zu Racket machen?
@YouKnowWhoIAm118
@YouKnowWhoIAm118 2 жыл бұрын
Bitte mal wieder irgendein Video zu Informatik. Ich würde zum Beispiel Typisierung interessant finden
@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
@fakecrafter7448
@fakecrafter7448 3 жыл бұрын
was für fonts sind das?
@davidak_de
@davidak_de 3 жыл бұрын
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!
@WCiossek
@WCiossek 8 ай бұрын
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 2 жыл бұрын
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 2 жыл бұрын
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.
@jenniferclock9384
@jenniferclock9384 3 жыл бұрын
nice. ich wollte bssl lernen was eine funktionale sprache ist, da ich mir clojure aneignen will. Danke!
@freduberlauf
@freduberlauf 2 жыл бұрын
Clojure? Gute Wahl!
@conrade.4110
@conrade.4110 3 жыл бұрын
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 3 жыл бұрын
Programmierst du immer im Light Mode? Davon bekomme ich immer sehr schnell Kopfschmerzen. 😂
@denisg1208
@denisg1208 3 жыл бұрын
Welche Tastatur benutzt du?
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
Eine Razer BlackWidow Ultimate, die mir seit 2014 treue Dienste leistet!
@TottiBln
@TottiBln 3 жыл бұрын
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 ;)))
@orca9469
@orca9469 2 жыл бұрын
Kannst du vielleicht dann auch mal ein Video über C#, C, C++ etc machen (objektorientierte Programmierung)
@tomdriver6733
@tomdriver6733 Жыл бұрын
Das würde mich auch interessierren.
@Cutrexxx
@Cutrexxx 2 жыл бұрын
spoiler für erste Aufgabe mit reduce: reduce(lambda a,b: a+1 if b%2==0 else a, numbers, 0)
@L4rsTrysToMakeTut
@L4rsTrysToMakeTut 3 жыл бұрын
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
@vine2875
@vine2875 3 жыл бұрын
An welcher Uni (in Hamburg) hast du studiert oder hast du garnicht in Hamburg studiert?
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
Uni Hamburg
@vine2875
@vine2875 3 жыл бұрын
@@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😊
@axelscheiber9499
@axelscheiber9499 3 жыл бұрын
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 3 жыл бұрын
Ich habe eine ähnliche Lösung: def anzahl_gerade(ls: list): return len(list(filter(lambda x: x % 2 == 0, ls)))
@MarkusBurrer
@MarkusBurrer 3 жыл бұрын
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 жыл бұрын
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 Жыл бұрын
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 8 ай бұрын
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 8 ай бұрын
@@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
@timi-mc1xt
@timi-mc1xt 3 жыл бұрын
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 3 жыл бұрын
Und warum kann es nicht genau andersherum sein? 🤔
@oscarmeischner6560
@oscarmeischner6560 3 жыл бұрын
Fast 50 k. ;)
@daniels.6534
@daniels.6534 3 жыл бұрын
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 :)
@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
@NeuroEverything
@NeuroEverything 3 жыл бұрын
I think for the first time in my life I wish I understood German
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
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 3 жыл бұрын
Deutsch ist sehr einfach zu lernen.
@fentonmsu
@fentonmsu 3 жыл бұрын
Ich mache Videos auf Deutsch, Russisch sehr schwerer.
@MinecraftWikiDE
@MinecraftWikiDE 3 жыл бұрын
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 3 жыл бұрын
nur aus Interesse: gelten static methoden dann nicht als methoden, da sie ja innerhalb einer klasse, aber nicht innerhalb eines Objekts sind?
@MinecraftWikiDE
@MinecraftWikiDE 3 жыл бұрын
@@ratzepalltuff9617 Meines Wissens nach ist ein static für genau den Fall gedacht, damit man wieder von Prozeduren und Funktionen sprechen kann.
@WCiossek
@WCiossek 8 ай бұрын
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.
@deadpoolgamer4824
@deadpoolgamer4824 3 жыл бұрын
Ich glaube mein Kopf ist geplatzt 😎✌😅
@Selbstzensur
@Selbstzensur 3 жыл бұрын
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 3 жыл бұрын
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. 🤔
@alicethegrinsecatz1611
@alicethegrinsecatz1611 3 жыл бұрын
Heute klingst du ähnlich wie der KZfaqr TheJoCraft
@mymacaintwag
@mymacaintwag 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.
@christianforler1476
@christianforler1476 11 ай бұрын
# 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, []))
@clownjunge2942
@clownjunge2942 Жыл бұрын
Niklas arbeitet mit Windows :D
@fritzbauer5043
@fritzbauer5043 3 жыл бұрын
Ich hätte Informatik studieren sollen :(((
@bunchofnumbers935
@bunchofnumbers935 3 жыл бұрын
Wieso machst du es nicht noch?
@Selbstzensur
@Selbstzensur 3 жыл бұрын
Ich war schon immer ein ganz schrecklicher programmierer.
@TottiBln
@TottiBln 3 жыл бұрын
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!
@nameunknown3272
@nameunknown3272 3 жыл бұрын
Viel zu viel auf einmal, wenn man dieses Video ohne Vorwissen schaut, versteht man gar nichts
@NiklasSteenfatt
@NiklasSteenfatt 3 жыл бұрын
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 3 жыл бұрын
@@NiklasSteenfatt ja das wäre toll! Obwohl es da schon einige Videos auf YT gibt. Vielleicht mit eigenem Twist
@vast634
@vast634 2 жыл бұрын
Da bleib ich lieber bei der klassischen Java Syntax, als diesem unübersichtlichen Lamda Quatsch.
@freduberlauf
@freduberlauf 2 жыл бұрын
Java hat seit 2014 Lambdas.
@hgdesign3674
@hgdesign3674 Жыл бұрын
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 2 жыл бұрын
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())
Programmieren Lernen: Die BESTE Methode (für Anfänger)
23:46
Niklas Steenfatt
Рет қаралды 1,6 МЛН
JavaScript lernen: Eine Einführung in 100 Minuten // deutsch
1:43:28
the native web GmbH
Рет қаралды 52 М.
I Built a Shelter House For myself and Сat🐱📦🏠
00:35
TooTool
Рет қаралды 29 МЛН
Can you beat this impossible game?
00:13
LOL
Рет қаралды 71 МЛН
Каха инструкция по шашлыку
01:00
К-Media
Рет қаралды 8 МЛН
Was ist Currying? - Funktionale Programmierung
8:28
Nerdisch
Рет қаралды 3 М.
12 geniale Techniken, die professionelle Redner benutzen
18:14
Niklas Steenfatt
Рет қаралды 78 М.
Wie du schnell jede Sprache lernst
14:10
Niklas Steenfatt
Рет қаралды 173 М.
INFORMATIKSTUDIUM: Was ich gerne DAVOR gewusst hätte
11:54
Niklas Steenfatt
Рет қаралды 160 М.
Mathematisch Beweisen mit NULL VORKENNTNISSEN! (echt jetzt)
14:39
Niklas Steenfatt
Рет қаралды 247 М.
EU-Wahl 2024: AfD legt zu, Ampel verliert! | #analyse
11:19
MrWissen2go
Рет қаралды 1,5 МЛН
I Built a Shelter House For myself and Сat🐱📦🏠
00:35
TooTool
Рет қаралды 29 МЛН