Bringing pattern matching to Dart

Поділитися
Вставка
  • Опубліковано 20 гру 2024

КОМЕНТАРІ • 114

  • @DaewonTech
    @DaewonTech Рік тому +6

    ⛱ Summary
    1:54 Multiple Returns
    6:09 Control Flow in Argument Lists
    8:26 JSON Destructuring
    10:28 Usable Switches
    13:43 Object Destructuring
    15:28 Functional Style Coding

  • @AnthonyBullard
    @AnthonyBullard Рік тому +31

    Thank you Bob (and of course the rest of the Dart team) for finally bringing this and tuples(err, records) to the language. I know I bugged you all about these features a lot all the way back in 2019.
    This goes to show that Dart at 3.0 will be the most improved language over the last five years

    • @AnthonyBullard
      @AnthonyBullard Рік тому +2

      Oh, and I loved Crafting Interpreters

    • @AnthonyBullard
      @AnthonyBullard Рік тому +4

      Oh, and thank you for value semantics! That really makes my day. Now only value classes are missing 😉

  • @tomchapman128
    @tomchapman128 Рік тому +11

    Switch expressions are a great addition! Love them in C# and really appreciate them in Dart now!

  • @MarcusTwichel
    @MarcusTwichel Рік тому +33

    Bob! I learned how compliers work from your book in my senior year compiler course, and now watching you talk about ASTs in the real world is so fulfilling ☺ thank you for all the hard work and an amazing language 💯

  • @greatestuff
    @greatestuff 7 місяців тому

    2:00 Multiple Returns
    6:22 Control Flow In Argument Lists
    10:28 Usable Switches
    13:36 Object Destructuring
    15:30 Functional-Style Programming

  • @dillonnys7707
    @dillonnys7707 Рік тому +24

    Thanks for your hard work, Bob, and to everyone on your team! Really looking forward to playing with these features 😃

  • @yonoseespanol
    @yonoseespanol Рік тому +7

    Dang -- switch case pattern matching is awesome. Very impressed!

  • @keylinwu4483
    @keylinwu4483 Рік тому +5

    Thank you for all these improvements! Architecture and structure in dart projects it's every new feature more powerful, clean, and beautiful! Coming from Swift, pattern matching and sealed unions is a crucial language features, and I've been missing that a lot! Thanks again!! Happy and can't wait to try all this!🤩

  • @Gabriel_Bento
    @Gabriel_Bento Рік тому +1

    That's really incredible! Today I've just started reading his book and for my surprise, i click in a Flutter video and guess who is hosting? The GOAT himself 👏🏻👏🏻

  • @truthmatters7573
    @truthmatters7573 Рік тому +13

    Can't wait for Dart 3 to ship! :D Great work all of you

  • @esc4p3EP
    @esc4p3EP Рік тому +2

    At last! I've been wanting comparison in switches since Dart 1. Thanks guys! 👍

  • @trymnilsen549
    @trymnilsen549 Рік тому +4

    Thanks bob and rest of the team, excited for it!

  • @hyungtaecf
    @hyungtaecf Рік тому +4

    I simply love it! This is so useful in so many ways! Thanks for your hard work!!

  • @infinitezymalny
    @infinitezymalny Рік тому +3

    Wow, json pattern matching is amazing! It will simplify work with json.

  • @guildem
    @guildem Рік тому +4

    Finally, tuples, and switch returning value like Rust. this is great !

  • @bselwesiuk
    @bselwesiuk Рік тому +2

    Such an amazing job by the Dart team, thank you!

  • @prerakmann1418
    @prerakmann1418 Рік тому +3

    Damn, this just made 2023 the best year 🔥

  • @FilipePratadeLima
    @FilipePratadeLima Рік тому

    This is awesome... Im falling in love with Dart after so many years in Typescript (won't even mention Javascript) Land. Thank you.

  • @souljorn1
    @souljorn1 Рік тому +2

    Great work and presentation. This all looks amazing.

  • @thanhdatvo0
    @thanhdatvo0 Рік тому +3

    We love this man! now we can make function return error and exception, same as golang and rust!

  • @aldeywahyuputra5719
    @aldeywahyuputra5719 Рік тому

    12:42 YESSS!!!! THIS IS SO AWESOME!!!
    OH THANK YOU DART TEAM FOR SWITCH AS EXPRESSION, ILYSM!!! ❤❤❤❤

  • @Pesthuf
    @Pesthuf Рік тому +12

    Ah, ADTs! I've liked Dart before, but all these features really make it way better.
    The language deserves better than to be regarded as merely "the language Flutter apps are written in" - I think it ticks pretty much all the boxes of what I want in a language and how it can be deployed.

    • @merthyr1831
      @merthyr1831 Рік тому +3

      Yes! I love dart so much. I wish more people appreciated it outside of Flutter :)

  • @voncth5791
    @voncth5791 Рік тому +2

    Thank for your amazing work dart folks!

  • @jaweene
    @jaweene Рік тому +2

    Some of these features are very practical!

  • @rahuldange
    @rahuldange Рік тому +2

    Just one word. Amazing!!!!💙

  • @akay5042
    @akay5042 Рік тому +4

    I can already see pattern matching and sealed classes optimising my current code. Thanks!

  • @richardambler
    @richardambler Рік тому

    I'm already drooling. Exciting times!

  • @irhasdev
    @irhasdev Рік тому +1

    Is so amazing to see the Dart lang developer are also music instrument developer

  • @danvilela
    @danvilela Рік тому +1

    I LOVE THIS!! Thanks Dart team!!!

  • @SEGVeenstra
    @SEGVeenstra Рік тому +2

    I cannot believe how exited I am for these features. (Thx Bob for explaining it so well!)
    Is this how people feel when watching tv and their sports team is winning?

  • @WilsonSilva90
    @WilsonSilva90 Рік тому

    Hey, we got Bob Nystrom on our team! I love his Game Programming Patterns book. This is so cool 💪🏾

  • @msh_dev
    @msh_dev Рік тому +6

    What about Static meta programming?

    • @jonathan-dias
      @jonathan-dias Рік тому +6

      will come after Dart 3. From the issue they say they will probably release a beta of metaprogramming later this year

    • @msh_dev
      @msh_dev Рік тому

      @@jonathan-dias What do you think will static meta programming will help a lot of developers.

    • @jonathan-dias
      @jonathan-dias Рік тому

      @@msh_dev definitely.

  • @saicharanmarrivada5077
    @saicharanmarrivada5077 Рік тому

    Crafting Interpreters is the best book I have ever read

  • @slyblood85
    @slyblood85 Рік тому

    Dudes got a pretty sick setup

  • @noursalman932
    @noursalman932 Рік тому

    So excited for conditional arguments

  • @GJJ2019
    @GJJ2019 Рік тому +2

    this some awesome stuff cant wait :)

  • @gregslu
    @gregslu Рік тому +3

    Functional programming was always my favourite

  • @blablablabla29382
    @blablablabla29382 Рік тому +2

    Nice voice quality, ty !

  • @AlexanderMazuruk
    @AlexanderMazuruk Рік тому +2

    Awesome stuff! Thanks

  • @thomasjarvstrand1511
    @thomasjarvstrand1511 Рік тому +1

    Wow. Just wow. Can't wait!

  • @0xba1
    @0xba1 Рік тому +4

    Love everything about this, except the $1 and $2 indexing for records, gives me "bad feelings". Love it, can't wait!

    • @qG0L0r6W
      @qG0L0r6W Рік тому +3

      It's on purpose. If you're not using destructuring to access the properties without names, you better give them proper names, otherwise it's going to be confusing regarding of whether it's $1, _1, first, second, etc.

    • @GeorgeNoiseless
      @GeorgeNoiseless Рік тому

      Having positional access as an option is quite sensible

    • @andreygritsay762
      @andreygritsay762 Рік тому

      @@qG0L0r6W but why use dollar sign and not just numbers?

    • @iGhostr
      @iGhostr Рік тому +7

      Why it's just 1 or 2 dollars... quite cheap if you ask me

    • @jonathanduck5333
      @jonathanduck5333 Рік тому +1

      @@andreygritsay762 I also wonder why start at 1 and not at 0 as is usual in programming

  • @kevinchadwick8993
    @kevinchadwick8993 Рік тому

    I think I will try to move case expressions to where case statements are allowed as it is much more readable. I love the case statements now, they remind me of my favourite language Ada. I love the data validation options. Ada has a Valid check for records. Pattern matching seems more flexible but can you get it wrong?

  • @CoderJava
    @CoderJava Рік тому +2

    This is so cool. I love it.

  • @TeamDman
    @TeamDman 4 місяці тому

    Great overview!

  • @YukiAttano
    @YukiAttano Рік тому

    Isn't the last mentioned part "functional-style programming", where we are using the sealed classes in switch case operations, the same as doing "if else" with some compiler sugar? or do they generate an enum in the background for matching the right type? (It's a performance question, do we have the casting overhead on all checks?)

  • @felipeemidio7240
    @felipeemidio7240 Рік тому

    Man... that's... just... beautiful!!

  • @fille.imgnry
    @fille.imgnry 2 місяці тому

    Dart is becoming one my fav langs ❤

  • @Walid-bv9vy
    @Walid-bv9vy Рік тому

    i appreciate your work

  • @aislanarislou
    @aislanarislou Рік тому +2

    This is one of the awesome things I was missing in Dart.
    Now I'm hopefully waiting for Pipes to be part of Dart as well, so we can make really awesome and readable codebases that Dart deserves.

    • @yonoseespanol
      @yonoseespanol Рік тому +1

      You can use pipe semantics via operator overloading. Not an exact fix..

    • @aislanarislou
      @aislanarislou Рік тому

      @@yonoseespanol can you to exemplify this approach ?

  • @alurma
    @alurma Рік тому

    Cool! Two questions:
    1) Does this essentially make enums unnecessary? I understand that backwards compatibility may mean that they stay in the language.
    2) Is Haskell style pattern matching supported, allowing to match both parts and the whole thing?
    Haskell working example:
    Input: let a@(b : c) = [1, 2] in (a,b,c)
    Output: ([1,2],1,[2])

  • @web3tel
    @web3tel Рік тому +1

    it is amazing, thank you!

  • @XSmile2008
    @XSmile2008 Рік тому

    Finally! In 2023 we finally can use `when` like statement that was added in Kotlin in around 2012)

  • @zark4711
    @zark4711 Рік тому

    For ADTs I would have liked the enums with associated values approach from Swift more instead of subclassing. Haskells handels them beautifully as there is not difference between enum and class/struct. But then you have all this OO in other languages and somehow need to cope with it. Kotlin also uses subclassing as a solution, it is a little clumsy, but it works. For Dart < 3 I implemented classes, that have an enum for the case and a bunch of optional variables - only one filled for the appropriate case - which would be tedious, if I wasn't using Sourcery for generating all this. It is good to finally support ADTs in any way.

  • @anujsaini7846
    @anujsaini7846 Рік тому

    can we use records as tuple for passing data to riverpod providers using family?

    • @ElteHupkes
      @ElteHupkes Рік тому

      I see no reason why not, I think they're going to be very useful for this indeed.

  • @鄭小白-n4p
    @鄭小白-n4p 5 місяців тому

    It's easy to make a compiler now!

  • @holthuizenoemoet591
    @holthuizenoemoet591 Рік тому

    I really like Dart to get more populair for general computing, like a more robust Typescript alternative

  • @philosophia5577
    @philosophia5577 8 місяців тому

    Incredible!

  • @bernaferrari
    @bernaferrari Рік тому

    I don't understand how "when" is different from "&&", how to "case" the if, and how :key works, is that the name of the return value?

  • @rafaelfranco7643
    @rafaelfranco7643 Рік тому +1

    awesome!!!

  • @leanghenglim
    @leanghenglim Рік тому +1

    Ugh, I just got schooled around unnecessary switch breaks. You mean to tell me I didn't need to use it all these time... they are quite annoying. Lol

  • @deniszavarzin2768
    @deniszavarzin2768 Рік тому

    What font is used in this slides?

  • @alurma
    @alurma Рік тому

    Beautiful

  • @elpitbullhouse
    @elpitbullhouse 8 місяців тому

    This is 🔥🔥!!

  • @prerakmann1418
    @prerakmann1418 Рік тому

    Can Records be extracted to a Typedef?

  • @fibulawars
    @fibulawars Рік тому +2

    I like this guy

  • @catbb
    @catbb Рік тому

    nothing about destructuring assignment ?

  • @deniszavarzin2768
    @deniszavarzin2768 Рік тому +2

    With pattern matching soon we will see new generic features and Prisma-like ORM. This is amazing.

  • @kerandonovan7255
    @kerandonovan7255 Рік тому

    Awesome!

  • @이운영-i9q
    @이운영-i9q Рік тому

    I love it!!!! ❤️ 😍

  • @jalalokbi2875
    @jalalokbi2875 Рік тому

    That's great news :)

  • @loclethai
    @loclethai Рік тому

    thanks

  • @r.i.c.o9820
    @r.i.c.o9820 Рік тому

    Sounds interesting

  • @weathercontrol0
    @weathercontrol0 Рік тому

    Still waiting for union types

  • @saiphaneeshk.h.5482
    @saiphaneeshk.h.5482 Рік тому

    Will there be any stable framework for dart backend?

  • @samueladole6074
    @samueladole6074 Рік тому

    So much Gold in Dart

  • @edenassos
    @edenassos Рік тому

    I would rather be able to use Rust with Flutter.

  • @Voltra_
    @Voltra_ Рік тому

    Sounds great, but would have expected something closer to Haskell or Rust to be able to finally get rid of some of the weird codegen for proper BLoC implementations

  • @nunebhargav
    @nunebhargav Рік тому

    When Dart adopts Rust features 🔥🔥

    • @richardambler
      @richardambler Рік тому +1

      Actually, these are features that have existed in various languages, such as the ML family of languages, for a long time. I think what we're seeing is a case of modern programming languages converging to support the same set of great features that have arisen in different languages at different times over the past 50 years or so.

  • @arslanyousaf2426
    @arslanyousaf2426 6 місяців тому

    who is using pattern and records in their code

  • @thatGeorgeR
    @thatGeorgeR Рік тому

    Why naming tuples "records"? To confuse users of other languages? You go C# way in naming things and this is not something good.

  • @АлександрИнженер-д4б

    Норм боб

  • @meyeti5422
    @meyeti5422 Рік тому

    ranges

  • @hydrilara
    @hydrilara 2 місяці тому

    More garbage,
    Why don't people like keeping stuff simple and clean.

  • @markonovakovic3838
    @markonovakovic3838 Рік тому

    as F# lover I can say that some of this is pretty ugly.... but am happy that it is coming. in case am using Dart (I hope not honestly) by the time 3.0 comes along I would definitely be happy about it. this is definitely couple of years too late tho

  • @jeroboam4486
    @jeroboam4486 Рік тому +2

    Very good presentation, however I'm saddened that Dart is falling in the same trap than C#: over burdening the language with syntactic sugar, functional elements etc to 1) appease the 5% of language snobs that demand these features and 2) justify the Dart team salaries.
    Dart isn't my main language so I don't code frequently in it. It started as a very simple language that wasn't getting in my way. But every time I come back to it more useless stuff has been added. Sometimes I spend more time thinking about the language than my code.
    More isn't better.

    • @baggern
      @baggern Рік тому +3

      lmao cope

    • @xmanreturn
      @xmanreturn Рік тому

      If it isn't your main language why do you care
      I think the feature added will be useful for sure

    • @jeroboam4486
      @jeroboam4486 Рік тому +1

      @@xmanreturn The fact it's not my main language doesn't mean I don't use it. And it's quite confusing when I do use it.

  • @user-sl7oc7tg4t
    @user-sl7oc7tg4t Рік тому +1

    Cool! Thanks for your job!
    w.r.t. for loop over Map.entries, I think it makes more simple and intuitive to just yield Record (key, value) than MapEntry.
    Anyway, can't wait for Dart 3.0 on stable channel!

    • @m00ni
      @m00ni Рік тому +2

      Ideally, yes, but that would require a potentially breaking change to the Map interface, which is harder. We have ideas on how to make this even nicer.

    • @user-sl7oc7tg4t
      @user-sl7oc7tg4t Рік тому

      @@m00ni In my opinion, there are two possibilities; add a new getter 'records' to Map or MapEntry inherits Record (K, V),
      but the former would be duplicated method, while the latter, I don't know whether it returns (key, value) by inheriting.
      I'm looking forward to your ideas on next announcement!!

  • @GeorgeNoiseless
    @GeorgeNoiseless Рік тому

    YES, finally. Thank You!
    It never ceases to amaze me how close Dart is to Python in many respects. For me personally that is a massive positive.
    Getting sidetracked a bit further Python even has a GUI library (widget wrapper) that seems to borrow somewhat from Flutter -- PySimpleGUI.