Snake case

From Wikipedia, the free encyclopedia
Jump to: navigation, search

Snake case (or snake_case) is the practice of writing compound words or phrases in which the elements are separated with one underscore character (_) and no spaces, with each element's initial letter usually lowercased within the compound and the first letter either upper or lower case—as in "foo_bar" and "Hello_world". It is commonly used in computer code for variable names, and function names, and sometimes computer filenames.[1] At least one study found that readers can recognize snake case values more quickly than camelCase.[2]


The use of underscores as word separators in identifiers in programming languages is old, dating to the late 1960s. It is particularly associated with C, being found in The C Programming Language (1978), and contrasted with Pascal case, an older term for CamelCase. However, the convention traditionally had no specific name: the Python style guide refers to it simply as "lower_case_with_underscores".[3] The name "snake_case" comes from the Ruby community, where it was coined in 2004 by Gavin Kistner, writing:[4]

(BTW...what *do* you call that naming style? snake_case? That's what I'll call it until someone corrects me.)

The name is evidently by contrast with CamelCase (as the subject of the message notes), continuing the animal theme with a long creature, low to the ground.

As of 2015 there are no standard names for other delimiter-separated naming conventions for multiple-word identifiers, though there are various terms with limited usage, such as lisp-case, kebab-case, SCREAMING_SNAKE_CASE, etc.[5][6][7]

Examples of languages that use snake case as convention[edit]

  • OCaml, for variable and function names
  • C++, for the standard library[8] and Boost[9]
  • Erlang, for function names
  • Perl
  • PHP, for functions, but not class methods. Older conventions were often using snake case for every type of identifiers, except classes and namespaces.
  • Python, for variable names, function names, and method names[3]
  • Ruby
  • Rust, for variable and function names[10]
  • Elixir, for variable and function names[11]

See also[edit]