Why does java not allow String objects to be used in the switch/case statements? Couldn't the compile invoke hashcode() on those strings thus producing a unique integer value to represent the constant in the cases?
>>7 like a month
Implying that it is somehow ready for production because of it's maturity. QA is calling and they want to talk to your boss... about you.
Enjoy your unemployment.
Sounds like you're just comparing each char to each other also and seeing if they match up.
Name:
Anonymous2011-10-21 1:37
You could create an interface that has only one member function, which takes as arguments everything that the switch statement needs to know, and then make instances of anonymous classes that implement the interface, and then insert these code handlers as values in a hash table, where the keys are the strings.
static void final public package javaFunctionFNJavaHelper(String value, String blah) {
value = value + blah;
switch(value) {
case "Java":
System.out.println("merpa " + value);
break;
case "Is":
System.out.println("derpi " + value);
break;
case "Fun":
System.out.println("dapity " + value);
break;
case "Is it Not?":
System.out.println("dooooo " + value);
break;
default:
System.out.println("Go fuck yourself.");
break;
}
}
Can be implemented very compactly with:
Interface MyHandler
{
public void exec(String value);
}
class MySwitchHandler implements MyHandler {
public SwitchHandler() {
this.table = new HashTable<String, MyHandler>();
this.defaultCase = null;
}
javaFunctionFNJavaHelper(String value, String blah) {
MySwitchHandler switchStatement = new MySwitchHandler();
switchStatement.putCase("Java", new MyHandler() {
public void exec(String value) {
System.out.println("merpa " + value);
}
});
switchStatement.putCase("Is", new MyHandler() {
public void exec(String value) {
System.out.println("derpi " + value);
}
});
switchStatement.putCase("Fun", new MyHandler() {
public void exec(String value) {
System.out.println("dapity " + value);
}
});
switchStatement.putCase("Is it Not?", new MyHandler() {
public void exec(String value) {
System.out.println("dooooo " + value);
}
});
switchStatement.putDefaultCase(new MyHandler() {
public void exec(String value) {
System.out.println("Go fuck yourself");
}
});
switchStatement.exec(value);
}
And any language that supports both easy syntax for hash tables and closures, you can do this:
function make_switch_statement(case_table, default_case)
meta_table = {__index = function(tab, key)
local value = rawget(tab, key)
if value == nil then
return default_case
else
return value
end
end}
setmetatable(case_table, meta_table)
return case_table
end
function woop(value)
print(make_switch_statement({
Lua = function()
return 'merki '..value
end,
Is = function()
return 'derpity '..value
end,
Fun = function()
return 'dipity '..value
end,
["Is it Not?"] = function()
return 'dooooo '..value
end,
}, function()
return 'Go have fun with yourself.'
end)[value]())
end
woop('Is') -- prints derpity Is
woop('Waba') -- print Go have fun with yourself.
Name:
Anonymous2011-10-21 2:39
>>25
Cleaning floors is wasteful and timeconsuming.
Just buy some cockroaches and they'll automatically eat it up.
Plus, you get free pet food.
Name:
Anonymous2011-10-21 6:48
>>28
You might want to consider using the Runnable interface for your MyHandler so that you can integrate better with legacy code.
Name:
Anonymous2011-10-21 6:56
As promised here is my C string switch:
/*
strswitch.h
Written in 2004 by Anonymous.
ENTERPRISE-GRADE C
*/
#ifndef _STRSWITCH_H
#define _STRSWITCH_H
#include <stdlib.h>
#include <string.h>
void *strswitch_var;
int strswitch_loop;
int strswitch_enter;
x=2; can you do this in Cee?
lolwut=function(){return 2}
switch(x){
case 1.01001: ;;break;
case "Sepples":;;break;
case 0:;;break;
case x:;window.title+='1';
case lolwut():;window.title+="2";break;
default:;;break;
}
nice, but I'd add __thread or something similar for thread safety
Name:
Anonymous2011-10-21 10:06
>>35
yeah i did know it wasn't thread safe, but didn't know about the __thread .. I had consider some kind of switch where you pass in the struct for the internal vars, but that wouldn't be so clean. (Lol like anyone would ever use it)