Episode #245

Fizz Buzz Kata

16 minutes
Published on November 24, 2016

This video is only available to subscribers. Get access to this video and 586 others.

Code Katas are interesting challenges that can help you practice programming. Some are extremely difficult and others are fairly easy, but they all allow us to exercise the act of programming. Doing code katas can help you learn a new programming language, a new algorithm, or a new style of programming.In this episode we’ll tackle one of the most trivial katas: FizzBuzz.

Episode Links

  • CodeKata - You can find more information on what a Kata is and why it is useful, along with a list of example Kata challenges.
  • Kata Catalogue - A great list of code katas
  • Source Code

Atom

In this screencast I'm using Atom. I've installed the following packages:

  • language-swift (for syntax highlighting)
  • seti-icons (for the nicer file icons)
  • ex-mode and vim-mode (for vim-style editing)
  • symbol-gen (for fuzzy finding based on code symbols in your project)

Setting up

Let's first create the project.

mkdir ~/Desktop/Katas
cd ~/Desktop/Katas

Then we will jump into this directory to create our project structure with swift package manager.

swift package init

This creates our initial project structure, complete with tests. We can verify that this is all working by running the tests:

swift test

Next, we want to use guard to be able to run our tests with guard any time a file is modified. We'll first set up our Gemfile and add our gems to it:

bundle init
vim Gemfile
source 'https://rubygems.org'

gem 'colored'
gem 'guard-shell'

Here we're using the colored gem to provide quick & easy colored terminal output. We're also using a guard plugin, guard-shell to have guard just run a shell script when a file is changed. This will pull in guard as well.

To set up guard we need a Guardfile:

bundle install
bundle exec guard init

Then we can edit it to include our configuration:

require 'colored'

guard :shell do
  watch(/(.*).swift$/) {|m|

    puts "Modified: #{m[0]}"
    puts "Running tests..."
    `swift test`
    if $? == 0
      puts "Passed".green
    else
      puts "Failed".red
    end
  }
end

Lastly, we just need to start guard to have it watch our filesystem:

bundle exec guard

Now when we modify the swift source files or tests, guard will pick up the change and execute the block above, effectively running our tests.

This episode uses Guard 2.14, Swift 3.0.