さまざまな言語仕様について熱く語る闘技場
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/12/08(月) 13:15:56ID:???0002nobodyさん
2008/12/08(月) 13:19:45ID:???0003nobodyさん
2008/12/08(月) 18:38:20ID:???array
って、書かないといけないの、なんとかならないの?
perlだったら、
@a=(1,2,3,4,5);
これで、すぐに配列作れるのに。
なんで、いちいち、arrayとかって、
言ってあげないとわからないの?
それと、配列のくせに、シジルが$なのも
むかつきます。納得できません。
0004nobodyさん
2008/12/08(月) 18:41:45ID:???0005nobodyさん
2008/12/08(月) 19:01:20ID:???0006nobodyさん
2008/12/08(月) 19:02:23ID:???関数ですよ
キミはperlから入ってきたからPHPの仕様をよく知らないようだ
0007nobodyさん
2008/12/08(月) 19:05:18ID:???無知な君のために証拠を見せてあげてもいいが、
見せてくれって頼まれてもいないのに見せたんじゃ、
知恵の押し売りになっちまうからな。
結論だけ。
システム仕様としてPHPのarrayは関数ではありません。
0009nobodyさん
2008/12/08(月) 20:34:25ID:???いちいち、わざわざ
array_pop
とかって、「array」を接頭辞につけるの?
pop、だけで十分、意味がわかるし、通じるじゃん。
実際、perlでは、「pop」だけで世の中回ってるよ?
0010nobodyさん
2008/12/08(月) 20:45:50ID:???0011nobodyさん
2008/12/09(火) 00:40:18ID:???因みにissetやemptyは関数じゃない
0012nobodyさん
2008/12/09(火) 07:17:29ID:???システム内で関数として定義されていると考えてよいの?
システム内では関数ではないが、関数っぽい動作するから関数として考えてもいいっていう文脈ではなくて?
0013nobodyさん
2008/12/10(水) 14:05:11ID:???0014nobodyさん
2008/12/10(水) 16:15:22ID:???様、言語構成要素の一つ。
array($x, $y,) のように、array()は最後の引数のあとにも , を置くことがで
きる。
http://jp.php.net/manual/ja/function.array.php
これは、array()の評価のされ方が、関数と同じではないことを示している。一
般のユーザがPHPやCで関数を書いて、array()と同じ挙動をさせることはできな
い。このことから明らかに、array()はPHPの構文解析器そのものに組み込まれ
た言語構成要素。
また array()はコールバックとして他の関数に与えることもできない。
http://jp.php.net/manual/ja/language.pseudo-types.php
これもやはり、 array()が関数ではなく言語構成要素だから。LISPで言えば、
高階関数にスペシャルフォームを与えることはできないのと同じ。
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も()つけて書けて関数のような形に見えるけど
それぞれの説明にちゃんと言語構造ですと書いてあり通常のとは書いて無いよ?
■ このスレッドは過去ログ倉庫に格納されています