さまざまな言語仕様について熱く語る闘技場
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/12/08(月) 13:15:56ID:???0015nobodyさん
2008/12/10(水) 16:17:25ID:???> popって、配列関係の関数に決まってるのに、なんで
> いちいち、わざわざ
> array_pop
> とかって、「array」を接頭辞につけるの?
それはたぶん、PHPに名前空間がなかったから。
Perlにはパッケージがある。
0016nobodyさん
2008/12/10(水) 19:03:12ID:???言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。 echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
arrayは言語構成要素の1つではあるが
言語構造では無く特殊な関数と言うことじゃねぇの?
ここらへんの説明よろしく
0017nobodyさん
2008/12/10(水) 19:04:48ID:???言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。
echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
arrayは言語構成要素の1つではあるが
言語構造では無く特殊な関数と言うことじゃねぇの?
ここらへんの説明よろしく
なんか改行が変になったので再
0018nobodyさん
2008/12/10(水) 20:16:36ID:???すまんが問われている意図がいまいちよくわからん。
逆に問い返させてくれ。
1. 「特殊な関数」って何だ?array()がその一つだと考えていることは分かっ
たが、他にはどんなのがある?
自分の考えでは、PHPには「特殊な関数」というカテゴリはない。関数か、そう
でないかだ。
で、関数かどうかは、「関数のように評価され実行されるもの」が関数だ。
array()は、構文解析器に備わった、関数を評価する汎用的な仕組みでは評価で
きないから関数ではない。
array()を評価するためには、構文解析器にarray()専用の仕組みが必要だ。
2. 「言語構成要素」と「言語構造」の違いは何だ?PHPではどれが言語構成要
素で、どれが言語構造なんだ?
自分の考えでは、この二者に違いはない。いずれも、構文解析器に専用の仕組
みを必要とするものだ。
0019nobodyさん
2008/12/10(水) 20:20:22ID:???とスペシャルフォーム(特殊形式)の解析方法の違いを念頭に置いて書いている。
0020nobodyさん
2008/12/10(水) 20:22:10ID:???もうすこし、関数を勉強してくれ、諸君。
0021nobodyさん
2008/12/10(水) 20:26:39ID:???パーサトークンであり構文。
http://jp.php.net/manual/ja/tokens.php
注釈が違うのはそもそも何かを処理するものでもない
arrayを可変コールすることなんざまずないからじゃね。
0022nobodyさん
2008/12/10(水) 20:38:29ID:???すまんがどっちを批判しているのか分からんかった。自分はSICPとか読んでる
けど、まだ分かってかもと不安になっちゃったよ。
しかし、普通のプログラマが「関数」という概念そのものを勉強するメリットっ
て、なかなか見えないだろうし、見えないと勉強しないと思うんだが。
>>21
おお、なんと明快な答えだ!
原文と、パーサトークンの一覧ページに当たれば、一目瞭然だな。
実はPHPの経験は浅いので、パーサトークンのページは知らなかった。ありがとう。
0023nobodyさん
2008/12/10(水) 20:40:14ID:???> 自分の考えでは、PHPには「特殊な関数」というカテゴリはない。
> 関数か、そうでないかだ。
特殊関数 つ ttp://jp.php.net/manual/ja/language.oop.magic-functions.php
002420
2008/12/10(水) 20:41:34ID:???どちらか片方を批判してるわけじゃない。
簡単に結論が出る内容を、よくわかってない者同士が、状況証拠を
並べ立ててワーギャーやってるので、書いてみた
0025nobodyさん
2008/12/10(水) 20:51:32ID:???なんだ、特殊関数という用語があるのか。
しかしそれはぜんぜん文脈が違う。__sleepや__wakeupは、特定の機会に必ずコー
ルされるというだけで、評価の仕組み自体は通常の関数となんら変わらない。
>>24
それは失礼した。また恥をかいてしまったが、あなたのおかげで勉強になりま
した。ありがとう。
0026nobodyさん
2008/12/10(水) 20:56:36ID:???おれは何も勉強させたつもりはないし、有用な情報は提示していないが?
特殊関数といっても、普通はマジックメソッドってみんな言ってるやつを
訳者が特殊関数って書いてるだけだと思う。
だからどうということはないが。
0027nobodyさん
2008/12/10(水) 21:10:56ID:???まあ勝手に感謝されたら気持ちが悪いかもしれないが、情報の価値はその受け
手が決めるもんです。PHP入門者の自分はまさにその情報を欲していた。
つうかあなたが「くだ質」スレに登場してたら、話は早かったのになあ。
http://pc11.2ch.net/test/read.cgi/php/1226517332/961-
http://pc11.2ch.net/test/read.cgi/php/1228667259/13-27
まあ自分はあっちのスレには書いてないけど。
マジックメソッドについては分かってる。今度は原文をちゃんと読んだし。
0028nobodyさん
2008/12/10(水) 21:17:57ID:???理解したのなら俺にどちらなのか教えてくれ
もし関数でなく言語構造というのであれば
何故態々”通常の”関数ではありません。 と書いてあるのか
0029nobodyさん
2008/12/10(水) 21:51:32ID:???うん、関数ではなくて言語構造。>>21氏のとおり、パーサトークン一覧に載っ
ているから明らか。
"通常の" 関数(regular function) と書いている理由は分からんけど、自分は
これは、通常の関数のほかに特殊な関数があるのではなくて、関数というもの
は(みんな)通常、arrayは関数でない特殊なもの、と書いてるだけだと思う。
0030nobodyさん
2008/12/10(水) 22:08:54ID:???特殊な物なら何故通常のと態々つけるの?
echoやincludeも()つけて書けて関数のような形に見えるけど
それぞれの説明にちゃんと言語構造ですと書いてあり通常のとは書いて無いよ?
0031nobodyさん
2008/12/10(水) 22:19:26ID:???でも>>29のように、関数を通常、関数以外を特殊という読解もできるよね?
もちろんあなたの言うようにも読める。原文の記述があいまいなんだよ。
で、決定的根拠は>>21。
0032nobodyさん
2008/12/10(水) 22:21:12ID:???0033nobodyさん
2008/12/10(水) 22:24:30ID:???[arrayは関数だゴルァ!] 攻撃:28 素早さ:65 防御:37 命中:52 運:21 HP:163
arrayは言語構造なの! vs arrayは関数だゴルァ! 戦闘開始!!
[arrayは関数だゴルァ!]の攻撃 HIT [arrayは言語構造なの!]は1のダメージを受けた。
[arrayは言語構造なの!]の攻撃 HIT [arrayは関数だゴルァ!]は169のダメージを受けた。
[arrayは言語構造なの!]が[arrayは関数だゴルァ!]を倒しました(ラウンド数:1)。
0034nobodyさん
2008/12/10(水) 22:26:07ID:???> Note: array() is a language construct used to represent literal
> arrays, and not a regular function.
0035nobodyさん
2008/12/10(水) 22:34:34ID:???関数以外を特殊と言うのであれば
何故issetやemptyあとlist等に通常と言う言葉が無いのさ
arrayだけ別の表現をする意味が無いよね
しかもだ
言語構成要素であり、通常の関数ではありません。
と言語構成要素という言葉があるの通常の関数ではないと
態々関数だけど特殊だよという風な書き方をしている
0036nobodyさん
2008/12/10(水) 22:35:28ID:???...。
あんまり勝負って考え方は好きじゃないなあ。
みんなが正しい結論に到達して、みんなが得した、と考える方がよくない?
まあスレタイ通りではあるけど。
0037nobodyさん
2008/12/10(水) 22:40:46ID:???だからそれはPHPマニュアルの表記の不備だろうってば。
つうか、array はパーサトークンの一つだと>>21で示されて、それでも状況証
拠を主張し続ける理由が分からない。
パーサトークンという言葉だけでは、あなたは納得できない?
0038nobodyさん
2008/12/10(水) 22:45:02ID:???http://pc11.2ch.net/test/read.cgi/php/1226517332/961
を否定してた奴涙目?
961の時点で正解出てるのに土曜日から今までほんとに何やってんだ
0039nobodyさん
2008/12/10(水) 22:46:02ID:???0040nobodyさん
2008/12/10(水) 22:50:47ID:???そういう言い方よくないと思うよ。彼(彼女)をきちんと納得させられないな
ら、むしろ自分たちがダメなんだと思う。
>>39
それは違う。ソースを読んだって、>>21と同じ情報が得られるだけだろう。
0041nobodyさん
2008/12/10(水) 22:57:43ID:???疑問に思うなら自分で調べりゃいいのに
0042nobodyさん
2008/12/10(水) 22:59:45ID:???できないかな
>>17に戻るけど
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
言語構造の一部である事はマニュアルにも"言語構成要素であり"と書かれている
これらの原因がただ単にマニュアルの不備が原因である
とは考えにくいよ・・・
もしarrayのマニュアルがarrayが出来てから
更新されていないというのであればそれも有りえるだろうけど
0044nobodyさん
2008/12/10(水) 23:01:51ID:???PHPマニュアルばかり引っかかって、自分涙目。
弱ったな。どこかに分かりやすい説明ない?(他力本願)
自分はLISPのごく簡単な処理系を作ってみる以外の方法を思いつかないが、
あまりにも非現実的すぎる。
ここで納得してもらうためだけに最低限必要な知識ってなんだろう。
0045nobodyさん
2008/12/10(水) 23:05:31ID:???なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。
しかし、おれはもっと確実にわかる方法を知っている。
もう少し、勉強したらいいよ諸君。
0046nobodyさん
2008/12/10(水) 23:08:18ID:???知ったかなんていらねーんだよ
0047nobodyさん
2008/12/10(水) 23:12:55ID:???> なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。
えー、そういう話なの?
演算子はトークンだけど、実際には関数が割り当てられている、みたいな?
ここで問題になってるのは構文解析で、実装はまた別の話だと思ってたよ。
> しかし、おれはもっと確実にわかる方法を知っている。
> もう少し、勉強したらいいよ諸君。
勉強はがんばりますので、どうか教えてください。
0048nobodyさん
2008/12/10(水) 23:24:50ID:???45はロジックとして証明にならないといっているだけ
0049nobodyさん
2008/12/10(水) 23:35:07ID:???文理上のことはドキュメントで確認するのが道理。
0050nobodyさん
2008/12/10(水) 23:44:02ID:???ドキュメント上は関数に分類されてて明確に否定されてないので関数であると考えるのが妥当。
ドキュメントはいろんな要件で書かれるからレイヤーの違いを理解できない人がいても仕方ないか。
システム上は判定一つ書けば結論でるしな。あれとか、それとか。
0051nobodyさん
2008/12/10(水) 23:46:15ID:???0052nobodyさん
2008/12/10(水) 23:51:08ID:???try {
ReflectionFunction::export("array");
} catch(Exception $e) {
echo $e->getMessage();
}
0053nobodyさん
2008/12/10(水) 23:52:01ID:???0055nobodyさん
2008/12/11(木) 00:02:45ID:???変わったその日から名実ともに関数じゃなくなるだろうね。
しかし、このルーズさというか曖昧さがPHPのいいところ
関数でも式でもないっていったって、言語構造っていったって、
if (include("test.php"))のreturnの扱いとか、特殊としか言いようがない。
0056nobodyさん
2008/12/11(木) 09:50:56ID:???0057nobodyさん
2008/12/11(木) 10:07:48ID:???・言語解析上は、array()はT_ARRAYであって、T_FUNCTIONではない。
・一般に関数とは、引数が与えられて一定の結果を返すものという意味では関数
・ドキュメント上では関数に分類されているが、T_FUNCTIONではないという注釈がつく
・パーサートークンの中には式(≒関数)として評価されるものがいくつかある。
・中でもarrayは関数的性質が強い。(副作用が少なく線形写像的)
・よって、ドキュメント上の表記に差異がある。
結論は各自が導きだせばよい
例1)array()は言語解析上は関数ではないが、一般論的には関数に分類される。
例2)array()は広義では関数だが、厳密には関数ではない。
例3)PHPの話をするなら言語解析だけで十分なので関数ではない。
などなど。
事情を分かった上であれば、害はない。
0058nobodyさん
2008/12/11(木) 17:25:38ID:???0059nobodyさん
2008/12/11(木) 17:45:58ID:???> 結論は各自が導きだせばよい
結論 = f(事情);
fの定義によって結論が変わるというのがこの現象のすべてで
その例を出せば十分だろう。
0060nobodyさん
2008/12/11(木) 18:23:36ID:???arrayもだせよ
0061nobodyさん
2008/12/11(木) 18:32:01ID:???> echoが文字を出力する
それは何の結論なんだよ
0062nobodyさん
2008/12/11(木) 18:34:06ID:???例2 echoは配列をarrayと出力する
例3 echoはカンマで区切って出力できる
例4 if (echo("hoge")) print("hoge");はパースエラー
0063nobodyさん
2008/12/11(木) 18:35:48ID:???0064nobodyさん
2008/12/11(木) 20:23:19ID:???ここでグダグダ言っても、Zendには声が届かない。
…と思ったが、参考になりました^^
0065nobodyさん
2008/12/11(木) 20:52:34ID:???スポンサーじゃなかったっけ?
0066nobodyさん
2008/12/11(木) 21:02:47ID:???perlがオープンソースだから
PHPをカンタンに作れたの?
0067nobodyさん
2008/12/11(木) 21:12:13ID:???0068nobodyさん
2008/12/12(金) 06:06:09ID:???まぁ、もっと初心者を取り込めたかもしれないねぇ。
まぁ、CPANの仕組みをもう少し落ち着いて考えたらよかったかもねぇ。
まぁ、そうならなくてよかったと思ってるPerlerは多いかもしれないけど、
まぁ、・・・
0069nobodyさん
2008/12/12(金) 11:23:10ID:???PHPって、存在しないプロパティに値を代入すると、その場でプロパティが生ま
れるよね?
php -r '$hoge = new stdClass; $hoge->fuga = "ふがふが\n"; echo $hoge->fuga;'
=> ふがふが
これってPHPマニュアルのどこに書いてあるの?
オーバーロードの説明は読んだ。__set()の説明はあったけど、__set()の中身
が何もないデフォルトの場合の挙動の説明は見つけられなかった。
おかげでずっと、新しいプロパティが生まれていることに気づかなかった。
0071nobodyさん
2008/12/12(金) 14:39:12ID:???くだ質にはちょっと前に同じ質問がされてたんだよ。しかし回答はなかった。
たぶんPHPマニュアルには載ってないんだろう。
この辺の挙動を知っておかないとオーバーロードは理解できないのに、PHPマニュ
アルには載ってないんだとしたら、詳しい人たちはどうやってこれを知って理
解したのか聞きたいんだよ。
ちなみにPHPマニュアルのページ下のコメント欄みたいなところには載ってた。
しかしあそこはホントに玉石混交で、あそこにだけ載ってても意味ないだろ。
0073nobodyさん
2008/12/12(金) 14:53:17ID:???今見てみたら、前スレの470だった。
http://pc11.2ch.net/test/read.cgi/php/1226517332/470
いろいろやり取りしてたけど、結局PHPマニュアルの当該URLは出てない。
0074nobodyさん
2008/12/12(金) 15:00:03ID:???http://jp.php.net/manual/ja/language.oop5.overloading.php
0075nobodyさん
2008/12/12(金) 15:15:12ID:???違うってよ。俺は__set()がユーザによって定義されてない、素のオブジェクト
の挙動の話をしてんの。>>69のコード読んでよ。これはPHP4でも動くんだよ。
そのリンク先のは、
> $obj->a = 1;
> echo $obj->a . "\n\n";
とかやってるけど、これは全部PHP5以降の __set()と__get()が呼ばれてるだろ。
0076nobodyさん
2008/12/12(金) 15:27:30ID:???http://jp.php.net/manual/ja/language.variables.php
0077nobodyさん
2008/12/12(金) 15:44:48ID:???おお、ありがとう。しかしこれ微妙に違うんじゃね?
これは
1.「未定義の変数をクラスとして扱うとstdClassのインスタンスになる」
ことの説明であって、
2.「任意のインスタンスは、未定義のプロパティをセットできる」
ことの説明じゃないだろ?
もちろん2.を前提として1.が説明されているわけだけど、2.そのものの説明は
どっかにないの?
0078nobodyさん
2008/12/12(金) 15:46:13ID:???0079nobodyさん
2008/12/12(金) 15:52:28ID:???0080nobodyさん
2008/12/12(金) 16:25:40ID:???いるとしたら、どうやって知った?
これをPHPマニュアル読んで知った人って、一人でもいる?
0081nobodyさん
2008/12/13(土) 00:40:30ID:???0082nobodyさん
2008/12/13(土) 06:10:54ID:???PHPの由来はHTML文書中で簡単に<?php echo $hoge;?>するのが目的だったので、
変数は宣言せず、最初に代入等がおおなわれた時に作成される。
というのが基本仕様で、昔のマニュアルでは見かけたことがある。
これは、現在のマニュアルの「変数」のページにも
PHPでは変数を初期化する必要はないが、という控えめな表現で触れてある。
PHP4で導入されたクラス・オブジェクトでもそのことは変わらず、
メンバー変数の宣言はできるものの、実際のところ、代入によって
変数が育成されるという仕様に変更はなかった。
PHP5になって、public,protected,privateの区別を宣言できるようになったが、
宣言がない、もしくはvarで宣言された場合、PHP4互換となる。
また、PHP5ではクラス用のマジックメソッドが用意された。
これにより、宣言していないメンバー変数に対してオブジェクトからアクセスすると、
メンバー変数が作られるという"仕様"が結果的に発生する。
しかし、制御したい場合は__setでreturn null;なり例外を発生させることで、
宣言していないメンバー変数を使わせないというシステム仕様は実現できるので、
特に不自由することはない。
おもしろいのは、前者の仕様で運用すると、同じクラスから発生したオブジェクトなのに、
なのに、メンバー変数一覧に差異が生じ、get_object_varsでクエリを自動育成などを
やろうとすると、不具合の原因になるが、それは仕様の乱用と考えるのが妥当か。
ながーい、憶測ですんまそん。
0083nobodyさん
2008/12/13(土) 09:49:00ID:???>変数は宣言せず、最初に代入等がおおなわれた時に作成される。
<?php echo $hoge;?>これのどこが代入なんだ?
0085nobodyさん
2008/12/13(土) 11:55:05ID:???0086nobodyさん
2008/12/13(土) 15:53:42ID:???インタプリタ環境での変数動的割り当てによる収穫について理解するのは難しい。
0087nobodyさん
2008/12/14(日) 02:27:01ID:???じゃあ、俺から。
C→Perl→Java→PHP→SQL→JavaScript→Excel VBA
次は、ActionScriptを勉強したいです。
0088nobodyさん
2008/12/14(日) 02:36:26ID:???0089nobodyさん
2008/12/14(日) 05:58:30ID:???ひどい順番だなw
SQLを使わずにJavaでなにやってんだかw
何一つ習得できなかったとかいう落ちはやめてくれよな
JS使えてればASなんて勉強するまでもない。
0090nobodyさん
2008/12/14(日) 11:49:11ID:???プログラムは、「データ」とデータの「処理」から成り立っている。
一応SQLでも、処理(条件分岐とか)が書けるんだよね。
cf.日経ソフトウエア 2008年 03月号 p.55
分類/基礎となる計算モデル/事例
手続き型言語/チューリングマシン/C, Java
問い合わせ言語(非手続き型言語)/関係モデル/SQL
関数型言語(非手続き型言語)/ラムダ計算/Lisp, Haskell
論理型言語(非手続き型言語)/一階述語言語/Prolog
こういう知識って、学校の授業で勉強する場合は、計算科学やソフトウェア工学という科目で習うのかな?
0091nobodyさん
2008/12/14(日) 11:58:38ID:???0092nobodyさん
2008/12/14(日) 12:11:59ID:???Javaはオブジェクト指向の教材として役立ちました!
…しょぼいアプレットが作れます><
ActionScript → Flash、Flex、AIRでWEBアプリを作る
広がる妄想(アイデア)が実現できれば、手段(プログラム言語)は何でもいいんだけど^^
0093nobodyさん
2008/12/14(日) 12:18:50ID:???0094nobodyさん
2008/12/14(日) 12:21:13ID:???http://www.mext.go.jp/a_menu/shotou/zyouhou/main18_a2.htm
=このスレのネタみたいに、関数がどうとか熱く語り合っているのかな?
量子コンピューターの設計とか、プログラミング言語をデザインするとか、
スーパーハッカーみたいな中学生ばかりだったら、技術立国日本の未来は明るいwww
0095nobodyさん
2008/12/14(日) 12:22:27ID:???0096nobodyさん
2008/12/14(日) 12:29:48ID:???簡単にできることを複雑にやる必要はない。
=WEBアプリなら、既存の資産を活かしてPerl、PHPで十分
0097nobodyさん
2008/12/14(日) 12:40:36ID:???Javaのおかげで、オブジェクト指向の話が理解できるようになった。
WEBプログラミングのおかげで、サーバー、ネットワークの話が理解できるようになった。
<今後の課題>
1.デザインパターンのマスター
2.LISPやScheme等の関数型言語をマスター
3.将来実用化されるであろう量子コンピューターについて予習しておく
WEBアプリが自由自在に作れるようになったら、小遣い稼ぎのPHPは卒業だな!(・∀・)
0098nobodyさん
2008/12/14(日) 12:54:56ID:???おれはPHPのかたわら、Haskellで遊んでみたけど、目から鱗。
PHPコードも洗練されてくるからおもしろい。
0099nobodyさん
2008/12/14(日) 13:19:12ID:???0100nobodyさん
2008/12/14(日) 17:24:38ID:???0101nobodyさん
2008/12/14(日) 22:02:13ID:???その中でも、<body>に関しちゃ、ネイティブ?って言われることがある
0102nobodyさん
2008/12/14(日) 23:56:30ID:???0103nobodyさん
2008/12/15(月) 17:36:09ID:???PHPの言語仕様について話し合える場所は少ない。
0104nobodyさん
2008/12/15(月) 17:42:21ID:???消えるのはお前だけだから
0105nobodyさん
2008/12/16(火) 22:48:52ID:???0106nobodyさん
2008/12/16(火) 22:52:43ID:9RkOzYwlなんで二つも同じことができるんですか?
0107nobodyさん
2008/12/16(火) 22:58:39ID:???0108nobodyさん
2008/12/16(火) 23:02:16ID:???0109nobodyさん
2008/12/16(火) 23:10:00ID:???0110nobodyさん
2008/12/16(火) 23:19:35ID:???0111nobodyさん
2008/12/19(金) 21:04:10ID:???叙事詩的定義もなにか新しいプログラミング言語のように感じる
0112nobodyさん
2008/12/19(金) 21:38:10ID:???CSSの関数ってのはググったら見つかったけど、
例)CSS//関数
http://suika.fam.cx/~wakaba/wiki/sw/n/CSS++%E9%96%A2%E6%95%B0
> 叙事詩的定義
ってのはぜんぜん見つからない。"epic(al) definition" でも該当なし。
詳細プリーズ。
0113nobodyさん
2008/12/19(金) 22:09:17ID:???日本語能力だいじょうぶか?
0114nobodyさん
2008/12/19(金) 22:39:27ID:???■ このスレッドは過去ログ倉庫に格納されています