How good is ramda.js?
Key Takeaways
Exploring Ramda.js functionality and use cases
Full Transcript
we should and we should we just say this in the beginning that this episode is an episode we really should just keep it it on in the background it's like if you like the soothing sound of people talking Randa it's like it's great good Monday morning today we are going to do like the number one request on the fun fun for a night and I never like there is an episode requests sub forum that I never look at but we're gonna do that today finally and like by far like people want us to do Ram de so we're gonna do rammed up what is Randa random is a functional programming language with like its it has a ton of functional programming waitwait function is it a functional programming like Java Script like a language I meant library okay yeah so most people are aware of the some of the functional utility functions that are built-in in JavaScript like map and reduce and filter what else those are not really functional utilities like I'm talking like actual helpful functions that do things like and but there are actually Tom's more you can use are composing functions creating pipelines like there are so many so much there little things that you can do and Ram there's a library that has all of these so it can be is the library that can be very helpful but it's also library that can allow you to create like absolutely insanely not understandable code at all which is colloquially referred to as rammed golf it sounds promising yeah it's so like the I think await useless episode where we did it better by using promises instead of the sink awaits impacts talk about that episode though derail me a lot we did not manage to make like a cook that's an episode where it completely managed to not make my point with anything yeah yeah you win some you lose some I think this episode is sponsored today's sponsor it's launched darkly launched darkly do you know that feeling when you're releasing a feature and the information that you want is in five different places what if there was a single place where you could get more visibility and more control launch doctor you have teamed up with Atlassian so that you can see your feature flags next to your related JIRA stories and issues read more about how to combine JIRA and launch Gartley at launch darkly fun fun function dot-com that link is also in the episode description okay whoa just one thing yeah this is a very very boring design something tells me Rhonda is not made by designers no not quite good yes it's made by functional programmers yep yeah actually there was a tweet the other day that someone that said that how could point free programming not be called functional programming that would have been so much more fun and are you said that yeah this is why Haskell programmers cannot have nice things like it's it's just like they they're it's it's this community without no sense of humor so it's a practical functional programming for JavaScript foreign air programmers let's just have a look at the documentation and you know let's actually just go let's build something with this we can just they have some yeah let's just build something yeah okay so let's just I guess I guess if we can have a list of things is that a good use case yeah yeah exactly just start with that like manipulating lists brand our examples so let's just do the basic one first and like just do map like map in the RAM no way so first of all we we need to pull in RAM de and cons are require lambda and it says how you do it oh no this is how you do it there we go sir oh yeah now we have Rama and then we go our dogs like ordered map and then we extract like the property of something like name you will just import something some data yeah let's start with some data so we can just let me send you a check oh yeah that's good reader returns a gamma deviate by the method of Marsala and sang yeah thanks what does that what is that even when no this is just random numbers and [ __ ] this was the worst David yep okay something more we call five buckets of data all right so a map I'm gonna name this function map names so now we have a thing that will gonna extract the name startup so I'm gonna like do like let's say dragons honest and this is gonna be an array and each item is gonna be like oh come on it's gonna be John and then we are gonna have like this gonna be named love Feakins and I also want to dragon that is named dick there we go this is just there is a scroll down there's a data set with just counties in the US so you see counties oh yeah yeah okay so I don't know what topic JSON is how can i how can I import this oh can I should I just fork it good question oh no good use the populations use population since that okay oh that's good alright oh this is pure array right oh sweet I can I can just copy this populations d3 is not defined let's find that yeah if you being confused about what we're doing here with observable it's observable is kind of like jsfiddle or code pen but it's more oriented around data and it and visualization of data yeah and it it's very very powerful and both me and David or fans it it seems a little bit magical at first glance it's really not and we you we really like it so it's an JavaScript notebook if you're familiar with Python notebooks yeah which that's s yeah anything perhaps only data people yeah I also like to think of it as Excel for JavaScript but like a more powerful Excel that allows you to see over script and allows you to do react like things in HTML and it allows you to add sliders in Lalibela things yep it also like it's very nice that it also allows you to pull in whatever NPM module whatever yeah everything so we can use doom and also if you look at the populations you can just because it's you can just fetch data from somewhere so someone published this see you see somewhere and then you can just fetch that and use that very simply yeah that's very nice so let's have a look at this so this is what we have here we have like an object that has an ID and a population so it's just okay I'm gonna remove my stupid example here so now I can go like I have this function here that I created while you were gone called map names we've gonna I'm gonna just change this to map like X population and now I can use this to do like map o population and now I can do map poor relation god I'm tired today I'm always tired like when we do these things it's just like that's just the the thing that we how we roll populations there we go and now I get like an array of these populations yeah and so that looks very much like what you would do in JavaScript well yeah like what you would do with like the function that is built into the array object yeah that's right and it's season mmm see if we can I'm gonna inline this instead and just do our map and then I'm gonna grab this inline function here I'm gonna do like that and then pull relation it's there so I don't know if you notice that because like when I I could actually use like the map function immediately after reassigning it so I could I basically was doing this mmm see like just create a block so that it's easier to see mapper final map funk now we're gonna call it a extract populations there and yesterday a Const and then go extract population I'm gonna return that and that gives us like this very same yeah so this automatically happened like this is because Ram da all random functions does this like they ought to carry themselves and that allows us to reuse them in in pretty nice ways we're gonna be talking about more and along the lines like where that is useful but perhaps we should do that immediately yeah so what so for me that hasn't seen rounder before yeah it's still like okay you used map yeah which I already had on population yeah so like so what more can I do here like could it's the thing with Randall that you can like do this on everything yeah let's have a look actually at before we continue like just let me show like the kind of utility functions that you can sort of expect from random let's have a look at Olympic now its plot then looking at returns a new desk by plucking the same name property of all objects in the lists supplied so this does exact this plot method here no plot function this this will do exactly what we already did let's have a look at extract population so I think just comment this out and do our dot plot population and there we go and then we get exactly the same result yeah there's also like this there's also method a function that does exactly what this does for example so I could do not say that comment there and come with that out put that there and then I'm gonna do oops or a map and then instead of doing this function I could use our dots for all like populations and that gives us the same result so these are not like the stupor best examples because they don't save like a lot of code I think they perhaps make the intent a little bit clearer as long as you know Ram de that is but like in some cases this can save you quite a bit of writing new functions so even if it's the thing that you're writing is rather simple such as extracting like this little black thing it's still nice to not not write everything right even simple things from scratch because as long as you're creating just some code that means that the more things you have that can go wrong the more things will go wrong so if you have the ability to use in an existing functions that is often a good idea maybe then again then again it might also be like very nice to just see like something familiar so that is why I rammed I is sometimes good to use and sometimes not but my main the reason why I used it like this our map and prop here is not not to give like a super good example of what Ronda it where Rama is useful it's give you an idea about what lambda is and but I allow you to use familiar concept to reason why would I use it for like when when would I feel like hmm I better use Randa like when what kind of things do I get stuck with to feel that hmm Ramdas perhaps the choice to solve this problem it was or is it is it more like a concept that if you're invested sort of in the RAM de world you sort of start building everything in Ronda yeah poor is a kind of sort of like that I would say it's sort of like if you're used to writing promise changed change them them then instead of doing that I think await sequential well synchronous you know writing or is that the thing is that likely like that comparison let's actually talk about promise chains a little bit because promise chains are per definition functional right and you go like then then then then like all right I'm gonna fetch a Buddha yep I'm gonna go fetch some water we were supposed to talk about stickers oh yeah after last week I announced the fun fun function sticker pack there's a lot of stickers like I'll semicolons cannot save you if JavaScript doesn't make sense there's a coffee break sticker there's a hello I'm a rocket surgeon sticker there's a fluffykins sticker also featured all briefly and this earlier in this episode there is a oppressed enter really hard and it works and I heard oppressed oppressed entered that will be for the next batch oppressed enter key and then there is a typing is charge sticker there is a circle circle CI sticker and there's also a god this is exhausting there's a murder robot dog sticker that I really like and there is also of course a good one and warning sticker and there's a pusher sticker it is like this is a pusher sticker alright come on come on focus focus yeah fun fun real-time so our sponsor pusher this is a software-as-a-service product for doing real-time features to your app and stuff like that and of course there's a fun fun function logo sticker how can I get hold of these amazing stickers yeah they all will be sent at the end of this month to everyone who is a super patron so you need to become a super patron before the end of this month you can find a link to how to become a super pregnant at the the in the episode description oh no hang on I haven't eaten my boule out you bastard no but I'm reflecting oh yeah yeah okay I'm reflecting okay so I've been watching that small small small code snippet and trying to figure out like so why wouldn't I use map in this example and I don't know anything about or still but it seems that the whole purpose of it is sort of like a convenience library sort of like underscore or low - yeah is that right actually did it's exactly like underscore no - actually so I thought ram des was so like I don't know instead of like a streams library pipeline library or something like that so I had I didn't know what what it was really but if I think of it sort of like what I'm used to with to score and low - which is basically just a utility library I see that I don't understand it yet but I suspect that it's pretty clever and generic that instead of just having that dot map that is attached to the - all arrays in JavaScript you can do the random app on pretty much anything because you just tie whatever function - it's like it's or a more general no that's what I thought why were you were fetching their puller no I guess and it's it's a lot more composable also I would say I think that we had actually in order to like why wouldn't I just use the filter and map and stuff I think that we should use something that isn't available on the on the array object and we're gonna combine it with map and filter and chain it so let's have a look I'm gonna remove all these stickers from my face so it's pretty funny that you didn't see like because hangouts is a piece of shite you didn't see yeah I have no idea what you did I sort of suspected what you did yeah let's let's look at the RAM de government in you see if we can find any interesting thing here what is take last while returns a new list containing the last n elements of a given list passing each value to the supplied predicate function and terminating with a predicate function returns false okay so it's basically walking through a list and then once we hit whatever condition we return the rest yeah it's actually it's actually it can actually walk through a func tour so again what func Tories yeah it's the general version of an array so functor is something that you can map yeah so as you see here an X in the example you can also do it on a string yeah so it takes last while it's not so this is here it takes last while it is not our and it takes the string Ram de and then that becomes M de so this is one of the nice things about Ronda is that you can it operates on not just erase but anything that is a punker and to do that in ordinary JavaScript you would like first you would take the rammed a string and then split it to turn it into an array and then filter it I guess yeah actually late oh you will you will map it and then yeah how would we do that yeah actually let's just do that various playing around here like so we have this thing here and uh let's try to re-implement this in in manila JavaScript how would you do that can I can I pin this yeah so we have this thing Const you're doing start with the array okay the string no I have the string yeah so then you would split that with an empty string yeah exactly we don't have to we have to make it into an array first so it's like spring split yeah no no oh yeah yeah exactly yes like that yeah and then we have okay so now we have this as an array and then we're gonna take the last one while we okay so again we will have to reverse it first right No SMAP we killed you either way we could just like but we couldn't do math because if as the string was we want to because the first occurrence of whatever of the or should just terminate so like my initial hunch was like okay we do array dot map yeah and then just return everything but capital R oh and then like remove but what will happen if we had rammed our then we would get am door so that doesn't work because then we had to loop through it we would have to terminate mid map oh yeah I guess mm-hmm we could I don't know how that we work or we would have to have like a memory somewhere we could perhaps I don't even know would you perhaps to reduce it to a new array that would just concatenate until we reach some mmm well I mean couldn't we just like okay let's see I'm just gonna take the if we just reverse it what happens am de and then we just keep taking like we're just gonna call it to this store like combs collected create a new array and we take our dot for each like some kind of weird bastard difference Frankenstein's monster between functional programming on procedural but or for each item or character I guess if all we need to declare the predicate here as well I says even call the predicate the callback this one predicates perhaps pretty good call like let's call it callback so if the 4-h if if the callback is oh I'm dumb what are doing that now if callback char yeah then we add it to the collected collected push push and then we push the item or the char and then we returned collected that work yeah but then we ask what happens if you tie what happens if the string is does it work with the R & R that's just proof that so you add an capital R at the end REM door like that with a capital R yeah it does yeah so this is like a real implantation of it it's not like can I this is how I would do it sort of without it I think we yeah we could what let's write it using reduce so array reduce or we start with and then I don't know yeah or you're right that the last yeah exactly they the we start with an empty array always keep remember like it's pretty sure that yeah something like that and then for so car it's gonna be the current is gonna beat shower and then if call back sure then we return the OH then we return prayer but we concatenate on the char if else then we return we just returned prayer I think so work return yeah that's right Wow did that work they just write like a reduce correctly from the beginning I'm skeptical I think that works yeah actually I did that's weird yeah I did yeah it's not quite right though because it's in the wrong it's ad MA it's already I'm de because we're like this last reverse signal for yeah so we could cheat I guess we could write it in the reduce if it somehow figures out that it's last index or we could just reverse it at the end yeah that's right reverse so yeah so now we have the this out then we get rid of like this and the statefulness procedural mess here so now we have sort of implemented this I think yeah we can actually just write this as a function now so it can do function take let's do this Const take class why and then we're gonna call it like callback and the array I suppose no it's the string no yeah let's let's call it array because this except to really array right now you know I just indent this nicely there we go and now we can do return say last while and paste in its callback and then do the yeah exactly what string split reverse there we go yep I'm not it works we actually need to join it as well oh yeah so drawing whoops but not with commas yester empty string so there I'm not and let's actually take last while string so and let's have the string here string and then do this then do this processing here first take as well alright so now we have reimplemented what Rama does so it's like not a ton of code especially like we could like make this into a one-liner I think with an arrow function and like this is this is very recurring in Rhonda it's kind of like it saves you like ten side lines of code here tens lines of code here but over time it tends to like add up a lot so like normally it's not the the map and the prop and the things that save you a lot of time it's like stuff like this it's just it's just pretty handy and it's also nice that you can just throw in a spring in it and you can throw in an array in it because this thing here this doesn't have like we can't throw this is not as generic as take plus one so are you saying that we could what would happen if we in there or take last while would input an array instead of the string that works is it that generic yeah this one yeah they can handle both strings and and erase I'm not sure what else it can handle honestly like if it can it handle iterators I'm not sure I don't know hypothetically I think that Rande wore a library like Ram that could be used to him like implement like handle iterators so that it could go through like you know streams or anything or like note lists in the in when I queried the Dom yeah exactly stuff like that or argue their arguments object in in functions and stuff like that order whatever now okay so for me now our same Ram Dass seems like a convenience library great but and okay it had or take last while which we just happen to pick randomly yeah but what would happen like when would I feel that like okay this was handy but I don't still see there the the big power of Ram Dass yeah like to me this just looks like an underscore or low - alternative but I don't see what makes it more than those yeah okay so let's let's try to attack that a little bit and for me composable yes it's a lot is one of the more interesting things with it let's see if we can figure something out yeah explain what you mean by composability yeah so let's say we have this populations array here and so we do poor you lations and then we go like filter if it has a population above yeah okay yeah cool some oh yeah thousand instead of 3,000 yeah to one and let's then we're gonna do like a I'm kind of like thinking that I want to get like take last while in here it's kind of like a stupid example but let's let's imagine that it was so much change edit populations go to populations yeah and just output state and county and they because they are strings and perhaps we could just say that as soon as we reach one stage oh yeah so then just comma state : Road upstate in the map there no state okay i getcha yeah so now we have state here and oh I had hoped that it nicer State yeah but that's fine it's not fine since the state is gonna be stringing OH - so let's say that we want to just keep running until we hit until we hit a certain state we could do that with filter I suppose but suppose that we then suppose that the condition was something else and then like if this was a promise chain we could have done we could have done then right but there's like yeah but there's like no way of processing in a chain here you get me you know you just get a new array yeah exactly so in order to do that I would have to do like Const filtered populations and then I would have to do like the run take lights while on populations which is I mean it's it's not horrible let's just let's break that out into its own I yeah let's no I'm just gonna like actually execute it and it's state equals okay and we need to actually have this take last while string oh no we're gonna do or say plus 1 T is not sure where is tea that confuses me - what or take that's why now we had it the wrong way you should you have the call back first oh yeah yeah yeah right because in in functional programming languages the this is always like the the filter is always a function what the callback is always first okay that didn't work that take less while I did not stay oh wait we need to go back to the last one how many are there a thousand okay okay let me remember going back to the last one yeah let's just let me quickly reverse it this is what why observables so nice D relation stopped reverse and it's 56 oh yeah no didn't work no I thought that this would work oh yeah because why doesn't this work perhaps there are no in populations it doesn't have anything less to take because there is no state 56 is not in the list after you filter it but it is in the list like I remove the filter here oh okay sorry population but yeah that was exactly well thought as well but is it that triple equals not nothing about that now that should be sort of look at what how does populations take last one Oh while not 56 pops oh okay then I get 3000 okay weird then it starts with 555 okay so I never calm explain this is what we expected all that important really yeah this was what we expected yeah it's not quite what I expected the important thing is we have a function that does some some kind of proper processing here yes okay where is it the same is it the same length no but now it's 902 yeah but now it's on the filter populations oh yeah I'm just saying okay I'm just saying that wasn't it 982 before before you take last one [Music] oops no no oh yeah yeah okay I just wanted a lot yeah but either way so let's have a look at what you can do Rio Grande are like Rama has like functions that allows you to combine these things so we can create like a function that is called let's say filter and take passed while and we're gonna do Rhonda I think it's like time perhaps thanks for five and then you take like our filter something like this do that there and comment it so much so that you could do at a new code block but oh yeah that's actually a better idea not but now I'm committed to this now it's too late too late too late too late it's too late to apologize too late and then I will go like then I can do our fake last wild and get us a kiss yeah yeah I'm just gonna take this one here like hey remember here here is where the currying that we talked about how Auto Korean comes in also you don't have to it just figures yeah because this out because this if I call our tech last while without the actual value it will be a curried version of it so it becomes this function that is ready to get a value oh and then in the end of the pipe you will add the input exactly so let's do this populations like we do that Oh return yeah then we get it what I like with this sort of is that it looks even though it looks strange I'm not used to the syntax and everything but this order like it's very clean in a way that you understand what goes through the pipe exactly so what will happen at each step yeah so it becomes pretty like once you like and you're not super familiar around now but you can't get it like it becomes like this the code becomes very like these pipe these things were like we process data and everything is like these little atoms and it forces you to think in terms of small composable functions so it becomes pretty like like okay so this is now like it's a little things so perhaps we want to actually name this so what was it like we could call this like filter large populations yeah exactly it's large population there you go there oh and now actually this this makes a little bit large popular so you can perhaps call this large populations except for this state 56 by the way only Const only lasts not last state without last stage because I thought they only had like 50 states but yeah that's a good point actually I'm pretty sure they have territories and Americas everywhere so perhaps it's staked in this I don't know it's just an ID it's not that any traitor it's just yeah like this is all I get literally the worst example it's so confusing but I hope that yeah we're using data that we we don't think we don't know what the day day is so we don't know what to do with it we have no clue we just want to try out random yeah exactly like unprepared and try to just attack it from so ok so now we have like these like do you see now how with okay large populations without lasts day or we can just call this big States or something and so okay this is pretty evident why this is super clear like I love how you write you have the big States thingy and then you were big States from you to enter the populations then you get only the big states out without the last days couldn't you do this if we go back to our initial thing like couldn't you do the same thing with like naming functions that you would rename that like you had filtered populations instead of populations dot filter and then you couldn't we have just renamed or take last while and then just chain them so you mean like this lik like I meant there with the way we did before we did okay so let's comment this one out and can we do this in a new code yeah you can we can compare them okay so let me break out let's pin that I'm gonna take these and break them out this because you're talking about when we have these these two right yeah so I'm gonna do that it's not completion then I'm gonna do that one without a state get rid of those and we want to basically rewrite this in like a procedural form or like doctor without rammed our thing so let's see we have populations so we're gonna do partial function big states and it takes this ring and it checks does like takes array and then it does a filter on it right right what is it okay it's large population is well this sheets a little bit because we partially use ramza here so we need to have a let's say that called is poor foolish its large population not random yeah no yeah kind of this is a bit force like this is actually the is large population so I think this is like filtered version of this large population so let's call we're gonna rename this and call it filter like only large filter large populations I'm gonna use that there and we're gonna extract like we're gonna like this is typical when you do like Ramna programming is a you figure out hey I can break this into even smaller named functions so I'm gonna call this is large population and we're gonna use that there okay why didn't this work listen I'm expected to it oh yeah all right so now we're gonna do all that filter is large population there I'm gonna create a new one that actually used big States or acute elations okay so what were we doing okay then we're gonna juice like without last state and we had written did we keep our this one we're gonna export our take class while string here no no hang on oh yeah export this then we're gonna do this so now we have explained yeah oh yeah yeah okay that's true call it take last wild string there go and there we have it our own implementation of that going back to our big state's implementation and yeah now we have like this mmm because we can't just tack this on because this is this is object-oriented functional sort of kind of thing and JavaScript it's functional and it's object-oriented so this actually shows one of the annoying things with object orientation that it ties like the types very firmly to the thing so you would have to wrap the app or a red filter with teh class while stirring exactly how we precisely we would have to do this so you like string not split this is not a function y this is perhaps it's an array yeah yeah exactly like now yeah exactly because now our take we have another function like our take last while does only deal with strengths yeah so we would have to rewrite our text last while because it's not generic okay let's let's not do that but just assume that we we had it and it like so yeah so the hole that we have to wrap it and just M I just like if you we just compare the to how you wrote big states using Rande yeah and then how you wrote it here it's just looks I'm trying to make this work next and is it the other way around in this time no okay let's look at without let's take yeah let's just use without last date it's like without last state there we go something like that yeah then it works yes so you have to like keep wrapping them up like yes while rammed allows you to do like it has like these Metacom positioning functions that allows you to create like these come like it allows you to build functions together into bigger functions I like it I honestly thought that I would just end up with not liking this and I had prepared a ramp yeah how this was just another library that you don't need but I like it yeah so I just I kept Ram yeah so let me give you like what there is this what Ram the function should I use this is this this little page on the RAM de wiki really which is really nice where you can do like okay remove values from the start at a value to the end combine two lists into a list of pairs based on custom logic and okay so what I like with this is that basically everything that you see there is composable that you can combine them together in like doing things exactly that right like I get it so there's Ronda I like it didn't prepare like a cell here or anything I just did everything impromptu and like I didn't know what questions you were supposed to ask but it I hope that your skepticism reflects the skepticism of of the viewer yeah and if you are either an ordinary forum patron or a super patron you can go into the forum because I know I'm pretty sure that there has been said threads on this and I'm on Ramba I'm gonna reread them now when I under lit finally understand Rama so their whole a sink away the useless thread didn't that have a lot of examples using Ramba yes it does it does and I never really understood what they did and I liked I didn't take the time to learn no exactly like because Rhonda can it is very possible to write extremely unapproachable code with lambda and functional programming in general I think it had just has that nasty problem that it can create really an accessible code but it can also if you just constrain yourself a little bit and and try to actually make it into readable code and like write your function names very clearly so that they they have simple simple names and use that then you can turn into quite nice like flows of stuff hmm I like it yeah I like it yeah so perhaps like we should we can do like more round explorations in the future like lore gets bit like specific random functions or like look at composability I think that this is yester first episode where we just like play around with it yeah and if you are viewing this and you have like the greatest use case for R & R please write that in the comments because I'm sort of convinced a bit that it's cleaner clearer composable but I would like to see more of these like comparison examples where I can see like that the non rammed away and then how random makes it better and I'm sure you're also ways when you make it worse with ramicus of course you can do anyway yeah I think that we should explore that a lot like when Windows RAM that I come too much and like now we like went wait for it down the rabbit hole and this is just unintelligible garble that isn't that would be simpler to write and in plain JavaScript when like when did people start using random or is it still like early days so I can feel like an early adopter if I start using it no I don't think you can use like this Ram nice very mature we used it a lot in production it's boiling then again they still call them a serial version but there is a 25 there I say that exactly it's like I guess that's like the that you're afraid of going public like you're or you're always in stealth mode yes as soon as you go public and try to start charging people for things or trying to like really really really convince people to use it then yeah more difficult now it's still a hobby project yeah you know that's all that's actually a slogan of Haskell avoid success at all costs did you know that okay yeah they they didn't like they liked the fact that Haskell is like not widespread and put a super motive for mainstream use yes sort of intentional from the community because when it is like they can't evolve as fast so should we wrap this up with mention of the sponsor gas law shortly yes a fantastic little software-as-a-service product that allows you to do feature flag management so if you want to start using feature flag in your application and you don't want to start building that system yourself which is way more complicated than one things we had a entire team doing it at Spotify for yours I think and yeah it's a very nice system and they are currently promoting this integration with JIRA so you can see like connected to your issues in in JIRA you can see what features the future flags are connected to that that issue and you can see if it is rolled out or not so it's like very nice integration if you use JIRA or lodged or you're thinking about future flags that kind of stuff you should really check it out at launch darkly dot fun for function don't calm and remember to become a super patron if you want cool stickers if you wanted a few to people that end all the way back here right in the comments just just mention that you watch the entire episode because this was long and not very efficient and I don't think you will edit it it will be very long even this will be very long episode like if you have fought through the episode to the end like your your your old warrior we should and we should we just say this in the beginning that this episode is an episode we really should just keep it it on in the background it's like if you like the soothing sound of people talking Randa it's like it's alright did you do like a takeover you have you know like in companies you often have like this company dashboard with the metrics how you're performing with all the kpi's just hack that thing and just put this on repeat you know like no one watch yourselves anyway perhaps we should just like like screw the teaching part of this this channel and study us do like developer ASMR it's just like us like Rhonda yeah you have a great microphone for that that is true like remnar yeah and then we can approach sponsors like do you want to be and we can put like we can say like wishes to decode backwards yeah and stuff like yeah yeah if you want the stickers make sure that you do it before the end of the October after that we're not gonna print them again it's gonna be there that they're gone that's the last last of them and if you're watching this after October 31st 2018 you can still become a super patron and then harvest other rewards eventually but we don't yeah all other hypothetical rewards then we would just be great yes yeah alright that's a lot of run thing this is a lot this is a ranty thank you relax episode but I have a lot of fun oh thanks for teaching me Ram da Matta yeah thank you for allowing me to rants about Ram de David you their viewer if you knew you have just watched an episode of fun fun function we release these every Monday morning Oh 800 GMT if you are forgetful you can subscribe by clicking here or you can watch another episode right now by clicking here I am mpj and I'm David until next Monday morning stay curious
Original Description
🔗Combine JIRA and LaunchDarkly (Sponsored)
http://launchdarkly.funfunfunction.com
💌 Get stickers by becoming a Super Patron ($9) before October ends:
https://patreon.com/funfunfunction
🔗 Discuss ramda.js on the Fun Fun Forum
https://www.funfunforum.com/
🔗 Code from the episode
https://beta.observablehq.com/@mpj/ramda-examples
🔗 mpj on Twitter
https://twitter.com/mpjme
🔗 Help translate the show to your language
http://www.youtube.com/timedtext_cs_panel?tab=2&c=UCO1cgjhGzsSYb1rsB4bFe4Q
ramda.js is a functional programming library for JavaScript. In this episode, we explore how it helps with composability, by using pipe and map and filter together, and how ramda auto-curries.
Watch on YouTube ↗
(saves to browser)
Sign in to unlock AI tutor explanation · ⚡30
Playlist
Uploads from Fun Fun Function · Fun Fun Function · 0 of 60
← Previous
Next →
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Higher-order functions - Part 1 of Functional Programming in JavaScript
Fun Fun Function
Map - Part 2 of Functional Programming in JavaScript
Fun Fun Function
Reduce basics - Part 3 of Functional Programming in JavaScript
Fun Fun Function
Destructuring: What, Why and How - Part 1 of ES6 JavaScript Features
Fun Fun Function
Reduce Advanced - Part 4 of Functional Programming in JavaScript
Fun Fun Function
Closures - Part 5 of Functional Programming in JavaScript
Fun Fun Function
Too many tools and frameworks!
Fun Fun Function
Currying - Part 6 of Functional Programming in JavaScript
Fun Fun Function
Recursion - Part 7 of Functional Programming in JavaScript
Fun Fun Function
Promises - Part 8 of Functional Programming in JavaScript
Fun Fun Function
Staying relevant as a programmer
Fun Fun Function
Factory Functions in JavaScript
Fun Fun Function
Composition over Inheritance
Fun Fun Function
Software needs to be better - FunFunFunction #1
Fun Fun Function
Unit testing: How to get your team started - FunFunFunction #2
Fun Fun Function
Straight-line code over functions - FunFunFunction #3
Fun Fun Function
Clojure - FunFunFunction #5
Fun Fun Function
The growth stages of a programmer - FunFunFunction #6
Fun Fun Function
5 tips to quickly understand a new code base - FunFunFunction #7
Fun Fun Function
Semicolons cannot save you! - FunFunFunction #9
Fun Fun Function
Functors - FunFunFunction #10
Fun Fun Function
Functors: I was WRONG! - FunFunFunction #11
Fun Fun Function
Questions and Answers - FunFunFunction #12
Fun Fun Function
Streams - FunFunFunction #13
Fun Fun Function
Prototypes in JavaScript - FunFunFunction #16
Fun Fun Function
Fast or Flexible? - FunFunFunction #17
Fun Fun Function
Coders are herd animals - FunFunFunction #18
Fun Fun Function
Weekend Kubernetes Shenanigans - FunFunFunction #19
Fun Fun Function
Monad - FunFunFunction #21
Fun Fun Function
Moar Weekend Shenanigans - FunFunFunction #23
Fun Fun Function
Questions and Answers - FunFunFunction #24
Fun Fun Function
Losing motivation - FunFunFunction #25
Fun Fun Function
LONGEST KUBERNETES SHENANIGANS! - FunFunFunction #26
Fun Fun Function
Fast code is NOT important - FunFunFunction #27
Fun Fun Function
Pair Programming a Facebook Messenger Bot - FunFunFunction #28
Fun Fun Function
Writing unit tests for personal projects? - FunFunFunction #29
Fun Fun Function
Let's Code a Pomodoro Button - FunFunFunction #30
Fun Fun Function
What editor do you use? - FunFunFunction #31
Fun Fun Function
Arrow functions in JavaScript - What, Why and How - FunFunFunction #32
Fun Fun Function
Is Programming Art? - MPJ's Musings - FunFunFunction #33
Fun Fun Function
Generators in JavaScript - What, Why and How - FunFunFunction #34
Fun Fun Function
Haskell Basics - FunFunFunction #35
Fun Fun Function
Haskell - Baby's first functions - FunFunFunction #36
Fun Fun Function
Is Big O relevant to you? - Q&A Part 1 - FunFunFunction #37
Fun Fun Function
How much are you allowed to Google? - Q&A Part 2 - FunFunFunction #38
Fun Fun Function
Haskell lists - FunFunFunction #39
Fun Fun Function
var, let and const - What, why and how - ES6 JavaScript Features
Fun Fun Function
Why are some programming languages popular? - MPJ's Musings - FunFunFunction #41
Fun Fun Function
Does a developer need to be nice? - MPJ's Musings - FunFunFunction #42
Fun Fun Function
bind and this - Object Creation in JavaScript P1 - FunFunFunction #43
Fun Fun Function
Examples of this and bind - Object Creation in JavaScript P2 - FunFunFunction #44
Fun Fun Function
Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46
Fun Fun Function
Separation of concerns RANT - MPJ's Musings - FunFunFunction #47
Fun Fun Function
Cellular Automata - Pair Programming - FunFunFunction #49
Fun Fun Function
The 'new' keyword - Object Creation in JavaScript P4 - FunFunFunction #50
Fun Fun Function
__proto__ vs prototype - Object Creation in JavaScript P5 - FunFunFunction #52
Fun Fun Function
Unity game pair programming - Let's code - FunFunFunction #53
Fun Fun Function
Throw out your tools - MPJ's Musings - FunFunFunction #54
Fun Fun Function
Unit tests vs. Integration tests - MPJ's Musings - FunFunFunction #55
Fun Fun Function
Object.create - Object Creation in JavaScript P6 - FunFunFunction #57
Fun Fun Function
Related Reads
📰
📰
📰
📰
AI Theatre: The Gap Between Talking About AI and Actually Using It
Medium · Cybersecurity
How to Structure Content for AI-First Indexing: 7 Rules That Get You Cited
Medium · AI
The Last Premium: What Stays Expensive When Thinking Gets Free
Medium · Data Science
Microsoft said the patches would get bigger. I measured how much bigger.
Dev.to · Erik Rekola
🎓
Tutor Explanation
DeepCamp AI