Settings

Theme

Swift for Rubyists: Optionals

nottombrown.com

17 points by nottombrown 11 years ago · 10 comments

Reader

anorwell 11 years ago

You don't touch on the fact that options act can act Monads (i.e., that you can invoke an operation on the inner value, conditional on whether or not the optional value is present). For example, an optional user translates naturally to an optional user.name.

I haven't tried swift, and it's not obvious to me from the swift documentation if their options support arbitrary transformations, or just method chaining. In ruby (with ActiveSupport) this is the difference between:

      might_be_nil.try(:method)
and

      might_be_nil.try { |value| my_function(value) }
The latter is more general and useful than the former.
krisdol 11 years ago

Is this different than setting a default value of nil to user?

    def print_favorite_dinosaur(user: nil)
or

    def print_favorite_dinosaur(user = nil)
Or is it effectively a different syntax for the same concept?

In either language, you still signal that the argument could be nil, and you still have to guard against it. Or so I think

  • nottombrownOP 11 years ago

    In Swift, you have to signal and guard against the nil.

    In ruby, you choose whether to signal and you choose whether to guard. Here are some ruby examples that may be more clear:

    Does not signal

        user = User.find_by_favorite_dinosaur("Dromiceiomimus")
    
    Does not guard

        def print_favorite_dinosaur(user)
            p "User's favorite dinosaur is #{user.dino})"
        end
    
    Signals and guards

        def print_favorite_dinosaur(user)
            if user
                p "User's favorite dinosaur is #{user.dino})"
            else
                p "No user. (Let's assume she likes T-rexs)"
            end
        end
    
        possible_user = User.find_by_favorite_dinosaur("Dromiceiomimus")
    
        print_favorite_dinosaur(possible_user)
    • krisdol 11 years ago

      Thanks, I didn't know that swift requires the optional to be guarded against.

nottombrownOP 11 years ago

Author here. Let me know your thoughts, concerns, and favorite dinosaur.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection