X



スレ立てるまでもない質問はここで 149匹目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/06/17(日) 10:31:28.00
質問する前にGoogleで検索しましょう。 http://www.google.com/
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
ワッチョイは住人が離れスレが寂れます導入禁止。

前スレ
スレ立てるまでもない質問はここで 148匹目 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1495618637/
0261経団連 ◆T6xkBnTXz7B0
垢版 |
2019/05/15(水) 21:51:15.83ID:lIe3zIuL
恐らく常識だが、「整数が奇数でなければ偶数である」という事実を使っている。
0262デフォルトの名無しさん
垢版 |
2019/05/15(水) 21:55:17.33ID:PcHnKSs6
独学用の教科書を謳っている本の解説をここでやってもらうって間違ってない?
C#の勉強より本の内容を把握する方が大変そう
0263デフォルトの名無しさん
垢版 |
2019/05/15(水) 21:57:15.90ID:FQJg1oiP
>>260
インスタンスは new ○○じゃないのでしょうか?
thisがこのような形で使われるのはこの本の中ではここが始めてでイマイチわかりません…
説明もないです
!が否定なのも何度か!=という表現が使われてるので分かるのですが
メソッドを呼び出す時に!を使うのは今回の章が初めてなので何がどう作用してるのかもわかりません…('A`)
すいません
0264経団連 ◆T6xkBnTXz7B0
垢版 |
2019/05/15(水) 22:11:28.38ID:lIe3zIuL
public bool IsEven(int x)
{
IEven o =this;
return !o.IsOdd(x);
}
これはoがthisの別名になるから
public bool IsEven(int x)
{
return !this.IsOdd(x);
} と同じ。さらに
public bool IsEven(int x)
{
return !IsOdd(x);
}
と同じ。 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
0265デフォルトの名無しさん
垢版 |
2019/05/16(木) 01:02:47.93ID:UYyJJgmj
メソッドを呼び出すときに!を使う特別ルールがあるわけではないよ
演算子の優先順位がわかってなくて混乱してるだけだと思う
1 + 2 * 3 の答えが 9 ではなく 7 であるという話に似ている
この式は分かりやすく書くと
1 + (2 * 3)

return !o.IsOdd(x);
を分かりやすく書くと
return !(o.IsOdd(x));
さらに次のようにも書ける
bool b = o.IsOdd(x);
return !b;
0266デフォルトの名無しさん
垢版 |
2019/05/16(木) 15:41:12.61ID:1R3UowzH
PHPのクラスは、
宣言と実装を分ける事はできんのですかね
0268デフォルトの名無しさん
垢版 |
2019/05/17(金) 18:31:52.56ID:Ytu1aTid
ゲーム用のRTOS的なのってないんだろうか。コンシューマゲーム機はハードメーカーが用意してくれているけど
PC等で汎用的に使える奴
0271デフォルトの名無しさん
垢版 |
2019/05/17(金) 18:44:16.58ID:htGImBGd
ゲーム機なんてバックグラウンドでいろんなサービスが動いてるし
フレームドロップし放題だからRTOSなんて必要とされてないだろう
RTOSの想定する用途とは真逆のものすごく高級で雑な世界
0272デフォルトの名無しさん
垢版 |
2019/05/18(土) 14:44:43.61ID:+n2NWOyo
クリックするとイベントが発火するボタンがあるする
これに効果音を乗せる場合、押下時に紐付ける?
それとも発火と同じクリック時?
0277デフォルトの名無しさん
垢版 |
2019/05/19(日) 20:35:17.21ID:pSjwtj6N
スレチだったらすみませんが誘導をお願いします。
筋トレの回数を記録するスマホアプリの開発がしたいです。日付・種目・セット数を保存するだけの簡易なものを想定しています。
以下の条件を満たす開発環境を利用したいのですが、何がおすすめでしょうか。
・Windows10で利用可能(linuxの仮想環境は用意出来ますが、Xcodeが使えないと思っています)
・Android/iPhoneのどちらでも使える(クロスプラットフォームが理想ですが、別々に作ったほうが楽ならそれでも可)
・サーバ通信なし(アプリだけで処理が完結する)

ご意見頂けると幸いです。よろしくお願いします。
0278デフォルトの名無しさん
垢版 |
2019/05/19(日) 20:55:48.28ID:oL0p/fvO
独習C#に
”tryブロックの中からメソッドを呼び出しそのメソッドの処理の中で例外が投げられたらcatchブロックで補足できる(ただし、そのメソッドの処理の中で例外が補足された場合には当然ながら呼び出し元では補足されません)”

というよく分かり辛い表現があるのですが
メソッド呼び出し中に発生した例外は補足されるのでしょうかされないのでしょうか…?
0279デフォルトの名無しさん
垢版 |
2019/05/19(日) 21:12:34.86ID:PSBPTvES
>>278
private void methodA()
{
try { methodB(); }
catch {/*例外処理A*/}
}
このmethodAから呼び出すmethodBに関して
・呼出した先で例外が発生すると呼び出し元でcatchされる
private void methodB()
{
/*何らかの処理、例外は呼び出し元の例外処理Aで捕捉される*/
}
・別のパターン
「そのメソッドの処理の中で例外が補足された場合」呼び出し先で例外処理は完了するのでmethodAではcatchされない
private void methodB()
{
try {/*何らかの処理、例外は例外処理Bで捕捉される*/ }
catch {/*例外処理B*/}
}
メソッド分けたけどtry-catchを入れ子にしても同じこと
実際にこのパターンで書いてみて動かしてみればいい
0281デフォルトの名無しさん
垢版 |
2019/05/20(月) 06:34:18.42ID:poyp5Kqc
>>277
漏れは、Ruby, Nokogiri, Selenium WebDriver で、ブラウザを自動操作して、
ローカルPC 内の画像ファイルを、ブラウザで見たりしてる

ただ、ローカルPC内に保存できるかどうかは、知らない

HTML, CSS/SASS, JavaScript, jQuery, Node.js も使う

でも、Windows10 で、iPhone は作れるかな?

>>278-280
C# のスレで、聞いた方が良さそう
0282デフォルトの名無しさん
垢版 |
2019/05/20(月) 21:23:14.49ID:VWEIYE4F
Visual Studio(C#)のプログラミングに関する質問です。

インクルードする2ファイルが、双方のクラスを互いに必要とするケースにおいて、
コンパイルが通らなくて困っています。(当たり前なのですが…)

【Aファイル】
クラスAの定義{
クラスBの使用(インスタンス作成、メソッド利用)
}

【Bファイル】
クラスBの定義{
クラスAの使用(インスタンス作成、メソッド利用)
}

【全体インクルードファイル】
#include Aファイル
#include Bファイル

【コンパイル結果】
Bクラスが存在しません(Aファイルにて)

【質問】
お互いにクラス定義を必要とする場合、
★具体的に★どのような実装をすれば良いのでしょうか?
0283デフォルトの名無しさん
垢版 |
2019/05/20(月) 21:27:54.97ID:g68Ac+XT
> インクルードする2ファイルが、双方のクラスを互いに必要とするケースにおい

そういう設計になるのが間違い
0285デフォルトの名無しさん
垢版 |
2019/05/20(月) 21:44:22.94ID:qyXChWvO
e-ラーニングの動画コンテンツみたいにさ、
Webページ上の動画をユーザが何分視聴したのかデータをDBに残したいんだけど、
どんな技術使えば実現可能なん?
0288281
垢版 |
2019/05/21(火) 12:16:28.57ID:ZAINLMmO
>>277
VSCode でも使っている、Electron もある。
これは、Chromium + Node.js

これも、Ruby, Nokogiri, Selenium WebDriver で、ブラウザを自動操作してるのと同じ。
実行環境がブラウザのChromiumで、ローカルPC へのアクセスに、Node.jsを使っている

これも、HTML, CSS/SASS, JavaScript, jQuery などを使う
0289デフォルトの名無しさん
垢版 |
2019/05/21(火) 12:21:00.91ID:ZAINLMmO
>>282-284
C# の質問は、C#のスレに書き込んでください!

それと、マルチポストは禁止です!
複数のスレや外部のサイトに、書き込まないでください!

他の場所・スレへ移動する場合は、元の場所の質問を締め切ってから、移動してください!
0290デフォルトの名無しさん
垢版 |
2019/05/23(木) 22:06:29.40ID:at6rVxVk
質問です。
qiitaのとある作者さんのWin32のウィンドウライブラリをパクったのですが、連絡を取るときはアカウントとるべきですか?
0291デフォルトの名無しさん
垢版 |
2019/05/24(金) 01:55:17.97ID:53a26ZX4
連絡取れれば何だって良いだろ。
ライブラリにライセンスがかいてあれば、連絡取る必要すらないし
0292デフォルトの名無しさん
垢版 |
2019/05/24(金) 10:46:29.85ID:Ph/OCthx
>>291
それもそうですなぁ。
qiitaのデフォルトライセンスの記述は見たことないなぁ。などと今思ったナリ。
0293デフォルトの名無しさん
垢版 |
2019/05/25(土) 04:32:03.46ID:7Hh+Cor8
高階関数だのラムダ式だの言ってるけど
関数ポインタを使ったコールバックと何が違うの?
0294デフォルトの名無しさん
垢版 |
2019/05/25(土) 05:05:26.86ID:hxN9RlQC
擬似言語でかくとC言語では以下のような、foo関数の中に
bar関数を定義するというような書き方はできない

foo() {
 bar() { }
 var bar_prt = bar;
 bar_prt();
}

このようにfoo関数の外に書く必要がある

bar() { }
foo() {
 var bar_prt = bar;
 bar_prt();
}

だから関数ポインタでは、以下のように、bar関数の中から
foo関数の中にある変数valueを参照するということができない

foo() {
 var value = 123
 bar() { console.log(value); }
 var bar_prt = bar;
 bar_prt();
}

別の場所にある関数だから、foo関数のローカル変数にアクセスできない

たとえ、foo関数の中にbar関数を定義できたとしても、関数ポインタと同じ仕組みであれば
bar関数の中からfoo関数の中にある変数valueを参照できない
0295デフォルトの名無しさん
垢版 |
2019/05/25(土) 05:24:03.98ID:HNNK4o9q
例えばqsortの引数に直接swap&compareコードを書けるようになる
いちいち外部に関数つくって名前つける必要なくね?

という感じ
関数ポインタじゃ絶対に実現できないというのはない
0296デフォルトの名無しさん
垢版 |
2019/05/25(土) 15:43:49.65ID:XXQvJLIJ
PHPのフレームワークLaravelを勉強している者なんですが、
Laravel EchoとPusherを使用してリアルタイムチャットを作ろうとしています。
色んなサイトを参考にして
Pusherの環境変数を.envに入力し、bootstrap.jsのコメントを解除したりして
色々設定し、通信状態もwebsocketになっていることが確認できました。
しかし、PusherのDebug Consoleに送信した内容が表示されません。
まだ何か設定が足りないとかありますでしょうか?
0298デフォルトの名無しさん
垢版 |
2019/05/26(日) 01:56:06.80ID:ZtwHTv9L
VisualStudioでDLLをデバッカしたいです。
ぐぐると、DLLを呼び出すexeを実行し、exeの対して「プロセスのアタッチ」を実行すればよいとありましたが、
DLLを呼び出すexeが一瞬で終わってしまうコマンドのため、アタッチできません。どうすればよいでしょうか。

試しに、exeを「ローカルWindowsデバッガー]で停止させ、別窓のVisualStudioコンソールでDLLのソリューションを開き
exeにアタッチしようとしましたが、「プロセスにアタッチできません。デバッガーは既にアタッチされています。」と表示され、アタッチできませんでした。
0299デフォルトの名無しさん
垢版 |
2019/05/26(日) 09:12:14.46ID:kGcgY47H
DLLのコードにブレークポイントを置いておいて、スタートアッププロジェクトのデバッグコマンドを
そのexeにしてデバッグ実行するだけでいいと思うけど。
0300デフォルトの名無しさん
垢版 |
2019/05/26(日) 11:56:12.17ID:PQEivHO3
>>299
すみません、Visul StudioでexeとDLLを同じソリューションで定義し直し(もともとは別ソリューション)
exeを「ローカルWindowsデバッガー」で動作させたところ、DLLのコードのブレークポイントで止まるようになりました。


追加の質問ですみませんが、「ローカルWindowsデバッガー」ではなくVisual Studioのリモートデバッカでデバックしたい場合ですが、
基本的にはデバックしたいexeのプロセスにアタッチする手番と思います。
アタッチする際に「使用可能なプロセス」の一覧からデバックするプロセスを選択すると思いますが、
非常駐プロセスの場合、この一覧からプロセスを選択できません。
デバックしたいexeが非常駐プロセスである場合、どうやってアタッチすればよいのでしょうか。
0301デフォルトの名無しさん
垢版 |
2019/05/26(日) 14:32:07.38ID:WMkIoFQL
以下のようなWindowsプログラム(メインプログラム)のソースを書きました。

main.cpp
-------------------------------------------------
int main()
{
int *pNumber2 = NULL;
HMODULE hMod = LoadLibrary(DLLPATH);
PTESTMALLOC ptest2 = (PTESTMALLOC)GetProcAddress(hMod, "Test_malloc");
ptest2(&pNumber2);
_CrtDumpMemoryLeaks();
return 0;
}
-------------------------------------------------
この中で、外部DLL(DLLPATH)の関数「Test_malloc」のソースは以下です。
-------------------------------------------------
void Test_malloc(int **pNumber2)
{
int *pNumber = new int[3];
pNumber[0] = 4;
pNumber[1] = 5;
pNumber[2] = 6;
*pNumber2 = pNumber;
return;
}
-------------------------------------------------

DLLPATHがdebugモジュールの場合、CrtDumpMemoryLeaksでpNumber2の解放漏れが検出できました。
しかし、DLLPATHがReleaseモジュールの場合、解放漏れが検出できませんでした。

外部DLLには上記のようにDLLの中でメモリを獲得し、呼出側で解放用の関数を呼んでメモリを解放しなければいけないものがあります。
外部DLLのdebugモジュールは一般には入手できないため、このような解放関数の呼び出し漏れによるメモリリークを検出する方法はないでしょうか。
0302デフォルトの名無しさん
垢版 |
2019/05/26(日) 16:24:24.45ID:iIpVyaKq
plsqlを.SQL形式で作って
それを読み込んでwindowsでワンボタンで実行するアプリ作りたいんだけど
手軽にやるならVBですか
0303デフォルトの名無しさん
垢版 |
2019/05/27(月) 14:10:24.34ID:lwWgLhFv
Release 用のモジュールでは、最適化されて、デバッグ用のシンボルなども削除されているのでは?
定数・変数なども計算済みで、なくなっているかも

Release 用には、デバッグ情報が無いかも
0304デフォルトの名無しさん
垢版 |
2019/05/29(水) 07:16:15.37ID:D5Uzvk1s
netbeansでgradle supportプラグインを入れて、
build.gradleでビルドできてるんだけど、
自分が使ってるgradleのバージョンを確認するにはどうすればいいの?
分かるのはgradle supportプラグインのバージョンだけ
0305デフォルトの名無しさん
垢版 |
2019/05/29(水) 16:42:43.88ID:GzQiC9d1
(1..5)
と記述すると1から5までの値を受け取れる…みたいな書き方があったような気がするんですが
rubyかpythonだったと思うんですが
どの言語の仕様だか解りますか?
この記述の後ろに何らかの標準関数をくっつけて配列に格納できるんだったかループに使えるんだったかあったような気がします
変な質問ですみません
0306デフォルトの名無しさん
垢版 |
2019/05/29(水) 18:22:39.44ID:D5Uzvk1s
kotlinのループ処理じゃない?
0307デフォルトの名無しさん
垢版 |
2019/05/30(木) 08:43:37.12ID:bb+aWtrz
Ruby の範囲・range。
.. は終端を含む。... は含まない

to_a で配列にできる

p (1..3).to_a #=> [1, 2, 3]
p (1...3).to_a #=> [1, 2]

文字列でも使える

r = "ay".."bb"
r.to_a #=> ["ay", "az", "ba", "bb"]

r2 = "08".."11"
r2.to_a #=> ["08", "09", "10", "11"]
0308305
垢版 |
2019/05/30(木) 13:55:13.85ID:3LmNBitO
>>307
あ〜〜〜それです!
名称が全然解らなくて調べようがありませんでした
ありがとうございました
0311デフォルトの名無しさん
垢版 |
2019/06/06(木) 21:58:18.27ID:zbQJx2S0
カーネルとかデバドラの開発でクラス設計は有用だと思う?
クラスが使える言語で開発するとして
それともやっぱりC言語が有力?
0312デフォルトの名無しさん
垢版 |
2019/06/07(金) 16:36:42.56ID:RHh4qcVs
ステートフルなら、クラスにまとめてクリアとかイニシャライズとか書くと扱いやすそうではある。
ステートレスならクラスにする必要はあまりないきがす。
0313デフォルトの名無しさん
垢版 |
2019/06/07(金) 22:29:25.97ID:7Zon1Gn3
GitHub上に公開されているオープンソースのコードにエラーがあって
それを修正しようとプルリクエストを送ったんですが
送ったプログラムにもエラーがあるってことで弾かれた場合
そのプルリクってどういう扱いになるんでしょうか?
一応元のコードに不具合があるという点だけは目を通してもらえる感じですか?
0314 ◆QZaw55cn4c
垢版 |
2019/06/07(金) 22:51:50.27ID:xDq7LtU5
>>311
そもそもそんな分野は mangling すら嫌われるし this を隠すことすら嫌がられるし、で、C 以外の最近の言語は全員討ち死にのような気がします
0315デフォルトの名無しさん
垢版 |
2019/06/10(月) 18:45:32.23ID:hjyhFff5
数学上の数式はすべて手続き型のプログラミング言語で表すことができますか。
これはどうしてもできなかったというご経験はござますか。
0316デフォルトの名無しさん
垢版 |
2019/06/11(火) 23:56:58.62ID:Z0aKnh9V
アンケートです
頭の中で想像してみてください
375という数は
A) 100がみっつ + 25がみっつ
B) 5の三乗がみっつ
C) そのほか
どういうイメージを最初に持ちましたか?
0321デフォルトの名無しさん
垢版 |
2019/06/12(水) 12:46:56.64ID:5tKK6KtT
DOSコマンドで、特定ドライブ配下の*.jpgファイルを削除し、そのjpgファイルが格納されていたフォルダも削除するにはどのような記述をすれば良いでしょうか?
0322デフォルトの名無しさん
垢版 |
2019/06/12(水) 13:17:32.58ID:bfQ8I+0P
DOSコマンド
ディレクトリ移動
ファイル削除 ワイルドカード
ディレクトリ削除
で検索
0325デフォルトの名無しさん
垢版 |
2019/06/12(水) 17:53:55.84ID:mJKxpoGK
旦那の秘蔵のお宝画像が全消去されてしまうのだろうか((((;゚Д゚))))ガクガクブルブル
0327デフォルトの名無しさん
垢版 |
2019/06/13(木) 04:40:29.01ID:t9tRfwUY
JavaとC++はどちらがバグ発生率が高いですか?
0329デフォルトの名無しさん
垢版 |
2019/06/15(土) 03:36:13.26ID:+E0qeAkk
win32APIはどれくらいC言語を勉強したら習うのが望ましいですか?
C言語入門書一冊読んですぐにAPI入門読んで理解できますかね?
0332デフォルトの名無しさん
垢版 |
2019/06/15(土) 11:32:24.39ID:iDiy+1Rd
ファイル結合を普通にやると
ファイル1を読み込んで、新ファイルのバイナリとして書き出して、ファイル2を読み込んで、新ファイルのバイナリに追記して…
って感じの冗長な処理がされてしまいますよね

これをさせずに、結合させるファイルのディスク上のアドレスを合成して新しいファイルを作るという処理で
ファイルを結合させることはできないでしょうか?(結合元のファイルは消滅してもいい)
0333蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/06/15(土) 11:39:41.35ID:mBb+t2vo
>>332
追記モード("a")でオープンして、別のファイルを読み込んだ内容を追記すればいい。
0336デフォルトの名無しさん
垢版 |
2019/06/15(土) 11:48:52.10ID:PosgiMuo
どんな環境か知らんがファイルシステムの勉強をするべきでプログラムはその後の話だな
0337デフォルトの名無しさん
垢版 |
2019/06/15(土) 12:14:19.04ID:iDiy+1Rd
>>334
セクタのことは考えてませんでした
このやり方はやはり無理っぽいですね
ありがとうございました
0338デフォルトの名無しさん
垢版 |
2019/06/15(土) 17:51:40.28ID:OoEP0oKH
>>331
理解出来てるかどうかは別として入門書に書いてある事は覚えました
何かを作った事はないです
0339デフォルトの名無しさん
垢版 |
2019/06/16(日) 09:56:53.52ID:zdQGVQX8
>>338
まず、何でもいいから何か作ってみるべき

次に何かGUIアプリを作る過程でWin32APIを勉強すればいい
(GUIの操作でWin32APIが必須になる)
0340デフォルトの名無しさん
垢版 |
2019/06/16(日) 20:46:15.60ID:xlnV7xsD
Win/Linux/BSDで使えてMIT/BSDライクライセンスのラスタライザがあるベクタフォーマットってありそうで見つからない
フルスペックのSVGみたいにリッチな必要はなくてテキストと基本的なプリミティブを使えて任意のピクセル数のキャンバスに
ラスタライズできれば良いんだけどな。う〜むどうしたものか
0342デフォルトの名無しさん
垢版 |
2019/06/18(火) 17:09:41.83ID:ex1at4o8
昔オーストラリアでハッシュ値が証拠にならんって科学的にめちゃくちゃな判決を出した
裁判事例があったそうですが、あれはその後どうなったんですか?
0343デフォルトの名無しさん
垢版 |
2019/06/19(水) 07:52:34.88ID:+gD2USC8
visualstudio2019でscanf関数を使うと
//戻り値が無視されましたscanf
//CL.exeはコード2を伴って終了しました
とエラーが出て実行できません。scanf_s関数を使うと
https://gyazo.com/9c36fd93f3fd6e3acdf299cf5262baf6 このようなエラーが出て上手くいきません。
ためしに SDL という項目をいいえに変えてみたのですが変化なしです。
どうすれば実行できるでしょうか?
0345デフォルトの名無しさん
垢版 |
2019/06/23(日) 15:02:47.62ID:6LMXkq2m
この記事を解説してください。プロトタイプとは何ですか?
https://sumim.hatenablog.com/entry/20080413/p1#c1208228975
>プログラムを動かしている最中にオブジェクトが出来ること、すなわちメソッド(method)を追加したり再定義したりできるかだ。
筆者はこの説明を否定しています。そしてこう説明しています。
>オブジェクトがそれが属するクラスによらず独自のメソッドやインスタンス変数を持てること*こそ*が、「プロトタイプベース」あらため「インスタンスベース」の本質です。

独自のメソッドは実行時に追加されるんですよね?
だったら最初の説明と同じでは?

あとインスタンスベースと呼べと言っているけど、
インスタンスはクラスに対して定義される言葉では?
クラスが無い場合インスタンスという概念を用いれないのでは?
0346デフォルトの名無しさん
垢版 |
2019/06/23(日) 15:29:52.70ID:NwTixeBO
>>345
> 独自のメソッドは実行時に追加されるんですよね?

一方は実行時でもう一方は特に言及してない
また後者は属するクラスによらずという条件があるが前者には無い
0347デフォルトの名無しさん
垢版 |
2019/06/23(日) 15:43:09.19ID:6LMXkq2m
実行時以外いつプロトタイプベースでオブジェクトのスロットへの設定が行われるんですか?
ソースコード中に静的に定義された定数的なオブジェクトを想定してるんですか?

属するクラスによらず、ってプロトタイプの時点でクラスが無いんだから暗黙の前提では?

というよりクラスがあるとメソッドとかを勝手に変えられちゃうと
型による安全性が機能しなくなるから、クラスがありつつプロトタイプってできない。
0348デフォルトの名無しさん
垢版 |
2019/06/23(日) 15:48:05.47ID:6LMXkq2m
あとやっぱりインスタンスベースというのはおかしくて、
クラスがある場合のみインスタンスという概念があるので、
プロトタイプベースでいいですよね?

インスタンスというだけだと、スロットの動的な設定ができることを示唆しない。
インスタンスという概念はクラスで作られたものを指すので、
その時点で好き勝手にメソッドを減らしたり増やしたりできないです。
それをすると型安全が機能しなくなるので許可する言語はありません
0349デフォルトの名無しさん
垢版 |
2019/06/23(日) 16:49:41.08ID:GLd8hMPk
アセンブラでもできると言ってるのと同じで、
できるできないの話をすればそりゃできるだろうけど、
人間が望んでいるのは高級言語
クラスベースを人間が望んでる
0350デフォルトの名無しさん
垢版 |
2019/06/23(日) 16:55:58.30ID:NwTixeBO
>>347-348

独自のメソッドやインスタンス変数を持てることが本質という主張なので
とりあえずクラス固有のメソッドを減らすという拡大解釈は無しで考えるべきでは?
0351デフォルトの名無しさん
垢版 |
2019/06/23(日) 17:37:38.66ID:fwFAut7X
JavaScript は、prototype 型

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain

var car = new Car( ); // コンストラクタ

// インスタンスと、prototype の両方に、メソッドを追加する。
car.f = function( ) { }
car.__proto__.f = function( ) { return 1; }

console.log( car, car.__proto__ ); // Car { f: [λ] } Car { f: [λ] }

var car2 = new Car( ); // コンストラクタ
console.log( car2, car2.__proto__ ); // Car {} Car { f: [λ] }

console.log( car2.f( ) ); // 1

car.f, car.__proto__.f は、1階層異なる。
car.f は、そのインスタンスだけに、メソッドを追加した(Ruby の特異メソッド)

一方、car.__proto__.f は、1階層親の__proto__、つまり、Car コンストラクタにメソッドを追加したので、
別のインスタンスにも追加されている!

だから、car2.f( ) を呼んだ際、car2 には、fメソッドが無いのに、
prototype chain を遡って、Carコンストラクタに追加された、fメソッドを呼べる!

ただし、__proto__ は非推奨となった!
0352351
垢版 |
2019/06/23(日) 17:58:05.28ID:fwFAut7X
>>351
修正。
先頭に、function 文が抜けていた

function Car( ) { }

var car = new Car( ); // コンストラクタ
0355デフォルトの名無しさん
垢版 |
2019/06/23(日) 23:39:07.95ID:6XN9j8Lj
プロトタイプ型言語ではインスタンス化することをコンストラクタって呼ぶの?
0356351
垢版 |
2019/06/24(月) 07:00:06.78ID:a0F4XMAJ
コンストラクタとして使う、メソッドを定義する

つまり、普通のメソッドではなく、
new を付けて呼んで、インスタンスを作ることを前提とするメソッド

function Car( ) { }

コンストラクタを呼んで、インスタンスを作る

var car = new Car( );

つまり、メソッドには2種類ある

new を付けて呼んで、インスタンスを作ることを前提とするメソッドと、
new を付けずに呼んで、インスタンスを作らないメソッド(普通のメソッド)
0357デフォルトの名無しさん
垢版 |
2019/06/24(月) 07:02:00.65ID:218UFAwP
>>350
あ、わかったかも。
「(クラス毎ではなく)オブジェクト毎に所持メソッドやメンバー変数を変えられる」
これがプロトタイプの本質だって言ってるんですね。

否定してる最初の説明でもその意味だと思うけど、
「動的にクラス定義を変更してその全インスタンスの振る舞いがまとめて変わる」
のか
「特定のオブジェクト限定で振る舞いを変えられる」
のかが紛らわしい。

まあでも当然後者の意味だと思うけど。
クラスが動的に再定義されちゃったら型安全壊れるし、
コンパイル時にバグを見つけれる事が強みなので、それをやる言語は無いはず。
0358デフォルトの名無しさん
垢版 |
2019/06/24(月) 07:43:03.13ID:y1bnKJFn
型安全ってC/C++みたいな言語の用語だぞ

そういう言語で、正しくない型として扱うと
不正なメモリアクセスとか無効な命令実行でプロセスが不正に落ちる

JavaScript等はどんなことをしてもプロセスが落ちることはない
正しくない型であつかっても例外が発生してトラップできる
だから動的に再定義されたとしても、型安全のまま
0359デフォルトの名無しさん
垢版 |
2019/06/24(月) 08:27:58.03ID:218UFAwP
ああそうか
まあでもその存在しないメソッドを呼んでしまったとかで例外が出ちゃうから、
クラスを使用している言語はオブジェクト別の所持メソッドの変更を許可しないだろうということです。
それをやっちゃうとせっかくのクラスによる安全性を放棄してしまう
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況