お世話になっております。
C言語のカテゴリで同様の質問をしたのですが、Javaだったらどうなるのか気になって書きました。
Switch case文を Switch Caseを使わずに、サブルーチンというかオブジェクトとして定義して、いつでも呼び出せるようにしたいのですが、どういう風に書けば完全とまではいけなくても似たような動きをするものができるのか、自分で考えたのですがやっぱりハードルが高かったと思いここに書きました。引数とかはお任せします。JavaはCよりもわかっていないので頓珍漢なことを書いてしまっていたらすいません。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
どのような動作を求めているのですか? 具体例で示してください.
あと, 「実際の言語」を隠したままそれとは違う言語でどうなるかを聞いたところで無意味であることには気付いているのかな?
No.2
- 回答日時:
先の質問に回答した者ですが、引数の数を可変とする関数の定義が出来るかどうかは、言語に依るし、出来る場合でもどう書くかはその言語によりけりです。
可変個引数が出来る言語であれば、先の質問の回答をベースに書き換えればいいかと思います。
可変個引数が出来ない言語であれば、分岐が2個用の関数、3個用の関数と、何種類もべつの関数を定義する必要がありますね。
>実際の言語は社外秘でかけません。よろしくお願いいたします。
社内独自作成の言語の場合は、社内で聞くしか無いですね。
>実際はJavaではない言語で、Switch caseが実装されていません。そのためSwitch Caseに近いものが作りたくなりました。
それを関数で作るというのは間違ったアプローチです。if then else if then else if の連鎖で書くのが正しいやり方です。さすがにif then elseの無い言語は無いと思うので。
No.3
- 回答日時:
余談:
「本当に社内で独自に作った言語」で「switch (相当) がなくて困っている」なら
作っているところに実装を要求する
のが最も正しいアプローチのような気がする.
少なくとも, こんなところで「この言語だったらどうすればいいですか」「あの言語だったらどうすればいいですか」と無意味な質問を繰り返すよりはよほど有意義だと思うな.
No.4
- 回答日時:
あなたの前回の質問の補足ですが
>実は、switch caseがない言語で開発しています。
>すると必然的に、if else の連発になります。
>コードが長くなり、非常にわかりにくく、かつ重いのです。
>そこで、switchcaseを作ろうと思いました。
ということでした。
C言語のswitch case文では
switch 変数名
case 定数1
処理1(複数行の場合もあり)
break
case 定数2
処理2(複数行の場合もあり)
break
case 定数3
処理3(複数行の場合もあり)
break
default
処理4(複数行の場合もあり)
となります。
これをif文で書くと
if 定数1
処理1(複数行の場合もあり)
elseif 定数2
処理2(複数行の場合もあり)
elseif 定数3
処理3(複数行の場合もあり)
else
処理4(複数行の場合もあり)
のようになります。
問題点は以下の2つです。
あなたが開発してる言語を仮にX言語と呼ぶと
問題点1.X言語で上記のif文で書いたコードを関数で実装できるか?
問題点2.仮に実装できたとして、処理速度は向上するか?
問題点2については、処理速度の向上はまず期待できないでしょう。
むしろ、関数の呼び出しのオーバーヘッドのぶん、遅くなる可能性が高いです。
従って、問題点2は、遅くなっている箇所(ボトルネック)を特定し、そこのアルゴリズムを見直す
ことでしか解決の方法はありません。
よって、switch caseの関数化は、処理速度の観点から言えば、やる必要なしという結論になります。
問題点1についてですが、関数で実装する為には、
処理1,処理2などの複数行に渡るコードをパラメータとして、渡す機能がX言語にあるかどうかが問題になります。
C言語であれば、処理1の部分を1つの関数にして、その関数名(関数へのポインター)を渡す機能がありますので、
それで実装可能ですが、あなたのX言語にその機能はあるのでしょうか?
もし、なければ実装不可能です。
もし、その機能がない場合の折衷案として、処理1、処理2、処理3・・・は固定(ハードコーディング)の処理
にするしかありません。そうすると、その部分は、その関数内部で抱え込むことになり、
処理1、処理2、処理3・・・の内容が変われば、そのぶん、又、それに対応した関数をつくることが必要になります。
従って、
1.X言語に処理1,処理2などの複数行に渡るコードをパラメータとして、渡す機能があるかどうか?
2.もし、あれば、実装可能。
3.もし、なければ、処理1,処理2などは、関数内にハードコーディングで抱え込むが、それが実用的かどうか?
ということになります。
余談ですが、
if 定数1
処理1(複数行の場合もあり)
の場合の、定数は整数型(C言語のint型)と考えてよいですか。
(他に、文字列、不動小数点などが候補になることはないですか)
また、
if 範囲1≦変数x≦範囲2
else if 範囲3≦変数x≦範囲3
のようなケースも関数化したいのでしょうか?
もし、そうであれば、定数を扱う関数とは別に、範囲1,範囲2をパラメータで与えるような関数を作る必要があります。
又、X言語がサポートしている型は、どのような型ですか。
又、C言語には、可変引数を処理できる機能(printfのような関数をサポートする機能、printfは引数を必要なだけ記述できる)がありますが、
X言語にはありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript switch文は、if文みたいに最初の()内に式を2つ以上設定できませんか。 1 2022/07/27 14:07
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) Excel コンボボックス バックカラー 1 2023/02/18 08:06
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- TOEFL・TOEIC・英語検定 This has not yet been proven to be the case for an 2 2022/06/20 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PythonやJavaScriptのように実...
-
C, C#, C++, Javaに関していく...
-
javaとJavaScriptの違いは なん...
-
Javascriptで出来ること
-
JSPファイルで生じるエラーをど...
-
VScodeのターミナルの文字化け...
-
vba クリップボードクリアにつ...
-
VBA(えくせる)ってなんでメン...
-
DirectX SDKのダウンロード
-
授業でプログラミングのJavaの...
-
サイドワインダーのドライバ
-
gitでバージョン指定してダウン...
-
struts2環境構築で不具合が出て...
-
Pythonを勉強する道のり
-
ホームページNinjaネットショッ...
-
Windows7でVB2005の開発
-
Javaでのエラーについて
-
オブジェクト指向について
-
スプライン補間関数が実装され...
-
XMLとUMLの相違点?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PythonやJavaScriptのように実...
-
JSPファイルで生じるエラーをど...
-
javaのジェネリックスでTとEの...
-
javaでの#if 0 #endif文
-
データベースの形式を認識でき...
-
正規表現について質問です。 カ...
-
ダブルコロンとアロー演算子
-
Pure Javaとは?
-
誕生日パラドックス
-
javaの堅牢性とは
-
while文を使ってのアプリケーシ...
-
Javascriptで出来ること
-
java と javaScript の違いはな...
-
サーブレットとPHPの違い
-
ラダーとjavascriptを勉強した...
-
java初心者なのですが、論理演...
-
正規表現で特定の単語を除外したい
-
C, C#, C++, Javaに関していく...
-
JAVAの特徴
-
VScodeのターミナルの文字化け...
おすすめ情報
すいません。補足です。実際はJavaではない言語で、Switch caseが実装されていません。そのためSwitch Caseに近いものが作りたくなりました。実際の言語は社外秘でかけません。よろしくお願いいたします。