Camel case and snake case: Difference between revisions
Thundergnat (talk | contribs) m (Thundergnat moved page Camel Case and Snake Case to Camel case and snake case: capitalization policy) |
|||
Line 24: | Line 24: | ||
=={{header|Phix}}== |
|||
<!--<lang Phix>(phixonline)--> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">to_snake_case</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">snake</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">trim</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">),</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"_"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">snake</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">isupper</span><span style="color: #0000FF;">(</span><span style="color: #000000;">snake</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000000;">snake</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'_'</span><span style="color: #0000FF;">&</span><span style="color: #7060A8;">lower</span><span style="color: #0000FF;">(</span><span style="color: #000000;">snake</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">snake</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">toCamelCase</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">camel</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">trim</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">),</span><span style="color: #008000;">"- "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"__"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">camel</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">camel</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">'_'</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000000;">camel</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">upper</span><span style="color: #0000FF;">(</span><span style="color: #000000;">camel</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">])</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">camel</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"snakeCase"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"snake_case"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"variable_10_case"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"variable10Case"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"ergo rE tHis"</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #008000;">"hurry-up-joe!"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"c://my-docs/happy_Flag-Day/12.doc"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">" spaces "</span><span style="color: #0000FF;">}</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">title</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">title</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%33s ===> %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">fn</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #008000;">" === to_snake_case ===\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">to_snake_case</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"\n === toCamelCase ===\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">toCamelCase</span><span style="color: #0000FF;">)</span> |
|||
<!--</lang>--> |
|||
{{out}} |
|||
<pre> |
|||
=== to_snake_case === |
|||
snakeCase ===> snake_case |
|||
snake_case ===> snake_case |
|||
variable_10_case ===> variable_10_case |
|||
variable10Case ===> variable10_case |
|||
ergo rE tHis ===> ergo_r_e_t_his |
|||
hurry-up-joe! ===> hurry-up-joe! |
|||
c://my-docs/happy_Flag-Day/12.doc ===> c://my-docs/happy__flag-_day/12.doc |
|||
spaces ===> spaces |
|||
=== toCamelCase === |
|||
snakeCase ===> snakeCase |
|||
snake_case ===> snakeCase |
|||
variable_10_case ===> variable10Case |
|||
variable10Case ===> variable10Case |
|||
ergo rE tHis ===> ergoRETHis |
|||
hurry-up-joe! ===> hurryUpJoe! |
|||
c://my-docs/happy_Flag-Day/12.doc ===> c://myDocs/happyFlagDay/12.doc |
|||
spaces ===> spaces |
|||
</pre> |
|||
=={{header|Raku}}== |
=={{header|Raku}}== |
Revision as of 17:32, 24 November 2021
Two common conventions for naming of computer program variables are Snake Case and Camel Case.
Snake case variables are generally all lower case, with an underscore between words in the variable, as in snake_case_variable'. Camel case variables are generally lower case first (except in some Pascal conventions or with class names in many other languages), with captalization of the initial letter of the words within the variable, as in 'camelCaseVariable'.
Leading underscores are not used in such variables except as part of a different naming convention, usually for special internal or system variables. White space is not permitted as part of camel case or snake case variable names.
- Task
- Write two functions, one to change snake case to camel case and one to change camel case to snake case. If possible, generalize the function enough to apply to strings containing spaces between words or a `-` dash between words, assuming that in those cases a space or hyphen is a also a separator character, like `_`, for the purpose of creating a new variable name. Leading or trailing whitespace may be ignored.
- Show the results on changing to both snake case and camel case for each of the following strings:
<lang java> "snakeCase", "snake_case", "variable_10_case", "variable10Case", "ɛrgo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces " </lang>
- Related tasks
Phix
with javascript_semantics function to_snake_case(string s) string snake = substitute(trim(s)," ","_") for i=length(snake) to 1 by -1 do if isupper(snake[i]) then snake[i..i] = '_'&lower(snake[i]) end if end for return snake end function function toCamelCase(string s) string camel = substitute_all(trim(s),"- ","__") for i=length(camel)-1 to 1 by -1 do if camel[i]='_' then camel[i..i+1] = upper(camel[i+1..i+1]) end if end for return camel end function constant tests = {"snakeCase", "snake_case", "variable_10_case", "variable10Case", "ergo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces "} procedure test(string title, integer fn) printf(1,title) for i=1 to length(tests) do printf(1,"%33s ===> %s\n", {tests[i], fn(tests[i])}) end for end procedure test(" === to_snake_case ===\n",to_snake_case) test("\n === toCamelCase ===\n",toCamelCase)
- Output:
=== to_snake_case === snakeCase ===> snake_case snake_case ===> snake_case variable_10_case ===> variable_10_case variable10Case ===> variable10_case ergo rE tHis ===> ergo_r_e_t_his hurry-up-joe! ===> hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc ===> c://my-docs/happy__flag-_day/12.doc spaces ===> spaces === toCamelCase === snakeCase ===> snakeCase snake_case ===> snakeCase variable_10_case ===> variable10Case variable10Case ===> variable10Case ergo rE tHis ===> ergoRETHis hurry-up-joe! ===> hurryUpJoe! c://my-docs/happy_Flag-Day/12.doc ===> c://myDocs/happyFlagDay/12.doc spaces ===> spaces
Raku
The specs are a little vague, but taking a wild stab at it... (May be completely wrong but without any examples of expected output it is hard to judge. This is what I would expect at least...)
<lang perl6>my @tests = qww<
snakeCase snake_case variable_10_case variable10Case "ɛrgo rE tHis" hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc " spaces "
>;
sub to_snake_case (Str $snake_case_string is copy) {
$snake_case_string.=trim; return $snake_case_string if $snake_case_string.contains: / \s | '/' /; $snake_case_string.=subst: / <after <:Ll>> (<:Lu>|<:digit>+) /, {'_' ~ $0.lc}, :g; $snake_case_string.=subst: / <after <:digit>> (<:Lu>) /, {'_' ~ $0.lc}, :g;
}
sub toCamelCase (Str $CamelCaseString is copy) {
$CamelCaseString.=trim; return $CamelCaseString if $CamelCaseString.contains: / \s | '/' /; $CamelCaseString.=subst: / ('_') (\w) /, {$1.uc}, :g;
}
sub to-kebab-case (Str $kebab-case-string is copy) {
$kebab-case-string.=trim; return $kebab-case-string if $kebab-case-string.contains: / \s | '/' /; $kebab-case-string.=subst: / ('_') (\w) /, {'-' ~ $1.lc}, :g; $kebab-case-string.=subst: / <after <:Ll>> (<:Lu>|<:digit>+) /, {'-' ~ $0.lc}, :g; $kebab-case-string.=subst: / <after <:digit>> (<:Lu>) /, {'-' ~ $0.lc}, :g;
}
say "{' ' x 30}to_snake_case"; printf "%33s ==> %s\n", $_, .&to_snake_case for @tests; say "\n{' ' x 30}toCamelCase"; printf "%33s ==> %s\n", $_, .&toCamelCase for @tests; say "\n{' ' x 30}to-kabab-case"; printf "%33s ==> %s\n", $_, .&to-kebab-case for @tests;</lang>
- Output:
to_snake_case snakeCase ==> snake_case snake_case ==> snake_case variable_10_case ==> variable_10_case variable10Case ==> variable_10_case ɛrgo rE tHis ==> ɛrgo rE tHis hurry-up-joe! ==> hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc ==> c://my-docs/happy_Flag-Day/12.doc spaces ==> spaces toCamelCase snakeCase ==> snakeCase snake_case ==> snakeCase variable_10_case ==> variable10Case variable10Case ==> variable10Case ɛrgo rE tHis ==> ɛrgo rE tHis hurry-up-joe! ==> hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc ==> c://my-docs/happy_Flag-Day/12.doc spaces ==> spaces to-kabab-case snakeCase ==> snake-case snake_case ==> snake-case variable_10_case ==> variable-10-case variable10Case ==> variable-10-case ɛrgo rE tHis ==> ɛrgo rE tHis hurry-up-joe! ==> hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc ==> c://my-docs/happy_Flag-Day/12.doc spaces ==> spaces
Wren
Well, I'm not entirely sure what I'm doing here as a result of space and hyphen being treated as equivalent to underscore but, in the case of the 'to snake' conversion:
1. I've retained any hyphens in the result string but replaced spaces with underscores as it says that white space is not permitted as part of the variable name.
2. I've assumed that an underscore should not be added if the previous character was already a separator. <lang ecmascript>import "./str" for Char import "/fmt" for Fmt
var toCamel = Fn.new { |snake|
snake = snake.trim() var camel = "" var underscore = false for (c in snake) { if ("_- ".contains(c)) { underscore = true } else if (underscore) { camel = camel + Char.upper(c) underscore = false } else { camel = camel + c } } return camel
}
var toSnake = Fn.new { |camel|
camel = camel.trim().replace(" ", "_") // we don't want any spaces in the result var snake = "" var first = true for (c in camel) { if (first) { snake = snake + c first = false } else if (!first && Char.isUpper(c)) { if (snake[-1] == "_" || snake[-1] == "-") { snake = snake + Char.lower(c) } else { snake = snake + "_" + Char.lower(c) } } else { snake = snake + c } } return snake
}
var tests = [
"snakeCase", "snake_case", "variable_10_case", "variable10Case", "ɛrgo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces "
]
System.print(" === to_snake_case ===") for (camel in tests) {
Fmt.print("$33s -> $s", camel, toSnake.call(camel))
}
System.print("\n === toCamelCase ===") for (snake in tests) {
Fmt.print("$33s -> $s", snake, toCamel.call(snake))
}</lang>
- Output:
=== to_snake_case === snakeCase -> snake_case snake_case -> snake_case variable_10_case -> variable_10_case variable10Case -> variable10_case ɛrgo rE tHis -> ɛrgo_r_e_t_his hurry-up-joe! -> hurry-up-joe! c://my-docs/happy_Flag-Day/12.doc -> c://my-docs/happy_flag-day/12.doc spaces -> spaces === toCamelCase === snakeCase -> snakeCase snake_case -> snakeCase variable_10_case -> variable10Case variable10Case -> variable10Case ɛrgo rE tHis -> ɛrgoRETHis hurry-up-joe! -> hurryUpJoe! c://my-docs/happy_Flag-Day/12.doc -> c://myDocs/happyFlagDay/12.doc spaces -> spaces