RubyKaigi 2017

Pattern Matching in Ruby

RubyKaigi2017
http://rubykaigi.org/2017/presentations/yotii23.html

Do you want pattern matching in Ruby? I want. It will make Ruby more elegant, more useful, and more comfortable. So in this talk, I'll propose a specification about pattern matching in Ruby and will show my implementation in parse.y (a part of them).

RubyKaigi 2017

00:00:11 I have translated the 'Ruby' series by Linda Lucas into Japanese. This series is a picture book about programming and computers for children. Additionally, I have translated 'Programming Elixir' by Dave Thomas with my husband, Koichi. I am also a member of RubyKaigi Japan.
00:01:02 This is my family. These are my kids and my husband. Unfortunately, I cannot talk about my family for 40 minutes today, as I have a goal for this presentation.
00:01:19 The main goal is to discuss pattern matching in Ruby, and the sub-goal is to show you how to extend Ruby by leveraging my pattern matching implementation. I wrote this with only several lines of Sheepsh language and mostly in Ruby. I will introduce how I did this.
00:02:02 First, I chose my pattern matching design, and next I will talk about what pattern matching is. I will show the details of my proposals, introduce my implementation, and discuss future issues.
00:02:51 Can you see the code here? Okay, let’s look into this code. You know, in Ruby, it makes sense when matching is done with patterns. For instance, when matching with an array, the first element is 'OK' and the second is a variable.
00:03:17 Let's say on the right side we have an object that matches the array. If the first element is 'OK' and the second element is 200, it will match and assign these values accordingly.
00:04:49 Let me show a simple example in Ruby. As you can see, it works perfectly. Before diving into the details, I would like to explain what pattern matching is.
00:05:56 I read on Wikipedia that pattern matching is the act of checking a given sequence of tokens against a pattern. However, I found it hard to understand, because it is quite broad, so I looked for examples.
00:06:41 Ruby does support pattern matching with regular expressions. For example, a pattern can begin with a capital 'C' and end with a lowercase 'p'. This means the string must match this condition.
00:07:14 Next, I want to talk about Elixir, which is a functional programming language that has a very powerful pattern matching system. Elixir always uses pattern matching, which is more than just assignment. In Elixir, you can do more complex checks.
00:09:09 For example, if you attempt to match with variables, the left side must comply with the pattern on the right side. If they don't match, an error occurs. This allows you to impose complex conditions directly.
00:10:18 I find this pattern matching system of Elixir quite fascinating, and I want to incorporate similar features into Ruby. The Ruby system is great, but I feel like it could be enhanced to be more intuitive and simple.
00:11:14 So here is my proposal. I suggest an operator like '%p', which works similarly to pattern matching in Elixir. It allows for simple and elegant syntax for users.
00:12:23 This is a simple example of how this can be implemented. You can match an array where the first element is 'NZ' and the second is a variable. Then, it checks different patterns and you can see it works successfully.
00:13:32 Now, I want to share more complex patterns. By using hash patterns, you can assign variable names obtained from matches. For example, if the name is from a specific hash, it can match and extract values easily.
00:15:00 These examples showcase how powerful the pattern matching feature can be. Furthermore, it can work with regular expressions to extend the possibilities of how data can be matched and processed.
00:17:14 In summary, this proposal for pattern matching aims to make Ruby more expressive and user-friendly in handling complex data structures. I believe it is an attractive addition to Ruby.
00:18:01 Thank you all for listening. I hope you see the value in this feature for Ruby. Special thanks to my husband, Koichi Sasada, who has been an excellent advisor in this journey.
00:20:27 And lastly, if you have any questions, please feel free to ask. I'm excited to hear your opinions and thoughts about these enhancements to Ruby.
00:21:19 Thank you for the great talk. I think we have a few minutes for Q&A. Please feel free to ask anything you'd like.