Ormnotation[källa behövs] (engelska: snake_case) är sättet att skriva sammansatta ord eller fraser i vilka elementen är åtskilda med ett understreckstecken (_) och inga blanksteg, där varje elements inledande bokstav vanligtvis är gemen och den första bokstaven antingen är versal eller gemen—som i ”foo_bar” och ”Hello_world”. Det används vanligtvis i källkod för variabelnamn och funktionsnamn, och ibland även för filnamn.

Kodstycke från en modul i Linux-kärnan, som använder ormnotation för identifierare.

Historia redigera

Användningen av understreck som ordavskiljare i identifierare i programmeringsspråk är gammal, och dateras till slutet av 1960-talet. Det är särskilt förknippat med C, så som det skrivs i boken The C Programming Language (1978), och i motsats till Pascal (som använder en typ av kamelnotation). Konventionen hade emellertid traditionellt inget specifikt namn: stilguiden för Python refererar helt enkelt till notationen som lower_case_with_underscores ("gemener_med_understreck").[1]

Usenet sågs ormnotation först inom Ruby-gemenskapen 2004, då Gavin Kistner skrev:[2]

BTW...what *do* you call that naming style? snake_case? That's what I'll call it until someone corrects me.
(ungefär "Förresten... Vad *kallar* man den namngivningsstilen? Ormnotation? Det är vad jag kommer att kalla den fram tills att någon rättar mig.")

En tidigare Intel-ingenjör, Jack Dahlgren, har dock sagt på Quora att han använde termen internt hos Intel (och kanske i dialog med Microsoft-ingenjörer) 2002[3]. Det är möjligt att samma term har utvecklats oberoende i mer än en gemenskap.

2015 har namnen på namngivningskonventioner för identifierare med flera ord ännu inte standardiserats, även om vissa termer åtnjuter ökad användning, så som lispnotation, kebabnotation, SKRIKANDE_ORMNOTATION, etc.[källa behövs]

Exempel på språk som av hävd använder ormnotation redigera

  • OCaml, för värden, typ- och modulnamn [4]
  • ABAP
  • C, för standardbiblioteket
  • C ++, för standardbiblioteket [5] och Boost [6]
  • Erlang, för funktionsnamn [7]
  • GDScript, för variabel- och funktionsnamn [8]
  • Java, för slutgiltiga statiska konstanter och enumvärden.
  • Perl, för lexikaliska variabler och subrutiner [9]
  • Python, för variabelnamn, funktionsnamn, metodnamn och modul- eller paketnamn (d.v.s. filnamn) [1]
  • R, för variabelnamn, funktionsnamn, argumentnamn, särskilt i tidyversstil [10]
  • Ruby, för variabel- och metodnamn [11]
  • Rust, för bland annat variabel- och funktionsnamn [12]
  • Elixir, för atom-, variabel- och funktionsnamn [13]
  • Eiffel, för klass- och funktionsnamn [14]

Se även redigera

Referenser redigera

  1. ^ [a b] ”PEP 0008 -- Style Guide for Python Code”. 5 juli 2001. https://www.python.org/dev/peps/pep-0008/. 
  2. ^ Gavin Kistner (2004-02-23). ”Appropriate use of camelCase”. Web link. Arkiverad från originalet. 
  3. ^ ”Quora”. 10 maj 2013. https://www.quora.com/Programming-Languages/What-is-the-history-of-the-term-snake-case-snake_case. 
  4. ^ ”Xen wiki”. https://wiki.xenproject.org/wiki/OCaml_Best_Practices_for_Developers#Names_of_Identifiers. 
  5. ^ ”Library Design Guidelines”. https://github.com/cplusplus/LEWG/blob/master/library-design-guidelines.md. 
  6. ^ ”Boost Library Requirements and Guidelines”. http://www.boost.org/doc/libs/1_34_0/more/lib_guide.htm#Design_and_Programming. 
  7. ^ ”Programming Rules”. Arkiverad från originalet den 4 september 2010. https://web.archive.org/web/20100904160816/http://www.erlang.se/doc/programming_rules.shtml#REF10726. Läst 30 juni 2019. 
  8. ^ ”GDScript Style Guide”. https://docs.godotengine.org/en/3.0/getting_started/scripting/gdscript/gdscript_styleguide.html#functions-and-variables. 
  9. ^ Perl Best Practices 
  10. ^ The tidyverse style guide. http://style.tidyverse.org/ 
  11. ^ ”Ruby Naming Conventions”. https://github.com/styleguide/ruby/naming. 
  12. ^ ”Rust Naming Conventions”. Arkiverad från originalet den 7 juni 2017. https://web.archive.org/web/20170607051157/http://aturon.github.io/style/naming/README.html. Läst 30 juni 2019. 
  13. ^ ”Elixir Style Guide”. https://github.com/niftyn8/elixir_style_guide/blob/master/README.md. 
  14. ^ ”Eiffel Class and Feature Names”. https://www.eiffel.org/doc/solutions/Eiffel%20Class%20and%20Feature%20Names. 

Externa länkar redigera