ぶっちゃけ始めるのにいい言語て何 part3

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/09/03(木) 14:23:33.06ID:Iw25SRBH
前スレ
ぶっちゃけ始めるのにいい言語て何 part2
http://mevius.5ch.net/test/read.cgi/tech/1594883518/
2020/09/03(木) 15:59:04.11ID:f/udSEF6
前スレより

790 1 名前:デフォルトの名無しさん Mail:sage 投稿日:2020/08/18(火) 17:43:05.80 ID:HR/M/dGq
>>765
対話的なプログラミング環境、いわゆるREPLは大事だよね
たとえば「0から9までの数字で偶数のものを2乗した配列」が欲しいとする
もしもこうした環境が提供されている言語であれば:

$ irb
irb(main):001:0> (0..9)
=> 0..9
irb(main):002:0> (0..9).select {|n| n % 2 == 0}
=> [0, 2, 4, 6, 8]
irb(main):003:0> (0..9).select {|n| n % 2 == 0}.map {|n| n * n}
=> [0, 4, 16, 36, 64]
irb(main):004:0>

その場で、手軽に計算を学習できる、あたかも電卓のように
こうしたメソッドチェーン(あるいは関数型言語におけるパイプライン演算子)は、
スレタイにある「ぶっちゃけ始めるのにいい言語」には必須じゃないかと思われ

https://qiita.com/subaru-shoji/items/110529c2c1824633d79c
2020/09/03(木) 18:13:15.27ID:6AJp7Q6D
日本語や英語などの自然言語ができるのなら、それよりはずっと簡単なんだから何でもいいから始めればいい
逆に本とかで勉強するだけでは身につかず実際に日常で使っていくのが一番の勉強になる
これは義務教育で英語やった人なら分かるはず。よってここはただの雑談スレ
2020/09/03(木) 18:43:13.63ID:bHyMdwQo
個人的にはCで始めることができたのは運が良かったと思ってる。

もう30年くらい前だが(w)、あのときFORTLANとかCOBOLだったら
今の言語見たら目が滑りまくると思う。

今ならC#かjavaから入っとけば潰しが効く気がする。パラダイムシフト
起こったら知らんけどw
5デフォルトの名無しさん
垢版 |
2020/09/03(木) 20:00:31.82ID:kL+30avi
>>2
selectやmapだの仮変数nだのをいちいち書かなければならなくて冗長。
ベクトル演算できる言語だとすっきり書けて小気味良い。

R: seq(0, 9, 2) ^ 2
Julia, Octave: (0:2:9) .^ 2
6デフォルトの名無しさん
垢版 |
2020/09/03(木) 20:24:50.20ID:o+d3Cgd9
C# 一択でしょ。Windows、Mac、iOS、Android、ウェブアプリ、何でも作れる。型を指定してオブジェクトを宣言するから、自動補完もばっちり。
2020/09/03(木) 22:28:17.87ID:V2b1bZds
スレたて乙
2020/09/03(木) 23:56:41.77ID:46Dd9IKP
>>2
irb とか、そんな面倒なものは使わない

VSCode の拡張機能・Code Runner(Run Code)で、
ファイル全体、または、コード片を選択して実行できる

p range = ( 0..4 )
p ary = range.select { |n| n % 2 == 0 }
p ary2 = ary.map { |n| n * n }

出力
0..4
[0, 2, 4]
[0, 4, 16]
2020/09/04(金) 06:21:36.08ID:3Qxfkq0A
>>4
目が滑るってプログラム的にどういう意味?
2020/09/04(金) 20:29:20.06ID:9etj62x2
UnityでC#触るのが楽しくていいんじゃない?
2020/09/04(金) 23:37:49.32ID:I8Hp1/bB
pythonは人気あるけど、括弧が無いっていう他の言語との違いが気になる。
C#とかTypeScriptが良いと思う。
12デフォルトの名無しさん
垢版 |
2020/09/05(土) 02:51:46.19ID:OV3VFUME
・・・どうしてマキマはパワーを殺めてもうたん?(´;ω;`)ブワッ
2020/09/05(土) 07:53:46.85ID:27CeiSlO
コード規約が多数派に行かないと苦労しそう。
14デフォルトの名無しさん
垢版 |
2020/09/05(土) 20:01:59.21ID:+9oXrKGt
僕もC♯やってつ
2020/09/06(日) 15:21:11.67ID:fVJSzq3O
javascriptかな。htmlとcssを一緒に覚えるとブラウザで遊べて楽しい。コード例もゴロゴロ転がってる。
2020/09/06(日) 20:31:23.67ID:3EmhWp3D
JavaScriptはもう触りたくないンゴ
2020/09/06(日) 21:59:02.12ID:bHAmEDsp
何をやりたいかにもよらない?
例えばWeb系やりたいならJavaScriptとか
2020/09/07(月) 00:06:42.80ID:3mV3QMzX
>>11 括弧がないってどういう意味?
2020/09/07(月) 00:59:38.23ID:iE0dVXFV
格好がつかない
2020/09/07(月) 04:25:35.25ID:PFWkTL8D
複合文の波括弧がないということでしょ。個人的にはオフサイドルールは大好きだけど、嫌いという人がいるのも分かる。
2020/09/07(月) 04:54:30.33ID:BYWLguUb
>>17
どこまで実用を見越すかってことだろうけどね。
ついでに人気度ランキングも。
だったら、Typescriptかな。
2020/09/07(月) 20:19:42.76ID:nh0ZPRbh
波カッコがないとブロックを終わるときにエディタが助けてくれないのかちょっといや
232
垢版 |
2020/09/07(月) 22:23:17.43ID:RPzI080p
>>2 のお題であれば、波カッコを使えば左から右へ流れるようなコードが書ける
  (0..9).select {|n| n % 2 == 0}.map {|n| n * n}

ところがだ、波カッコを無くしたまでは良かったけど、代わりに丸カッコを三重に入れ子にした
コードを書かざるを得ないのが Python といふ言語
 list(map(lambda i:i**2 , range(0,10,2)) )

 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」より引用
 http://mevius.5ch.net/test/read.cgi/tech/1594883518/808/

インデントを強制することによってコードを簡潔にして可読性を高める、
と言うアイデアは決して間違いではなかったけれど、Pythonが言語設計の比較対象にしていたのは
FORTRAN/COBOL/PASCALそしてPerlといった手続き型言語とそのプログラミングパラダイムだった
確かにWHILE-ENDやFOR-ENDでループ処理をゴリゴリ回すコードが比較対象であれば美しかった

けれども時代はオブジェクト指向(メソッドチェーン)や関数型(パイプライン演算子 or 関数合成)といった
より洗練されたプログラミング表現へと進化している
たとえば古典的な関数型言語のLISPはS式と呼ばれる丸カッコの入れ子が代名詞だけれど、
最初からインデントの強制を前提に設計された関数型言語Haskellであればパイプライン演算子や関数合成は使えるし、
それどころかHaskellは型システムを前提にしたソフトウェア設計論やプログラミンングにおける圏論といった、
未来へと続く次世代プログラミングヘのパラダイムシフトへの影響をもたらしている

当初は手続き型言語として設計された(Perlと比較すれば)簡潔で美しいスクリプト言語 Python、
けれども新宿界隈の雑居ビルのごとく行き当たりばったりに中途半端なオブジェクト指向や関数型が導入された
2020/09/07(月) 23:11:49.23ID:3uGG3SyO
>>23
偶数のみを処理するのとイテレート時に1個飛ばしで処理するのは意味が違うから混同しちゃだめ

Ruby
(0..9).filter(&:even?).map{|x| x ** 2}

Python
[x ** 2 for x in range(0, 10) if x % 2 == 0]
or
list(map(lambda x:x ** 2, filter(lambda x: x % 2 == 0, range(0,10)))) # 醜いので普通は使わない
252
垢版 |
2020/09/07(月) 23:44:37.90ID:RPzI080p
>>24
> 偶数のみを処理するのとイテレート時に1個飛ばしで処理するのは意味が違うから混同しちゃだめ

前スレ808氏が苦し紛れに書いたコードでしたので、私はあえてツッコまなかったのですが。。。鬼ですね


> [x ** 2 for x in range(0, 10) if x % 2 == 0]

こちらの内包表記を用いたコードであれば「醜さ」は改善されていますね
もっともHaskellのように、あたかも数式であるかのように書ければ、
より「美しい」と共感する人は多かったのでは無いかと思われますが
 [x ** 2 | x <- 0..10, x % 2 == 0]

> { x ^ 2 | x ∈ S, x > 3 } みたいな数学の集合の表現が元ネタなのかもね

 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」から引用
 http://mevius.5ch.net/test/read.cgi/tech/1594883518/811/


では、続きまして前スレから次のお題です
・ある配列を、昇順に並べて、反転して、文字列化して、間を”-“で繋ぐ
 [1,4,3,2].sort.reverse.map(&:to_s).join('-')

 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」から引用
 http://mevius.5ch.net/test/read.cgi/tech/1594883518/791-792/

このように波カッコを使えば、先のお題と同様に左から右へと流れるようなコードが書けます
たいして難しいどころか日常的に見られる簡単なお題ですから、もちろん内包表記でも書けますよね?
2020/09/07(月) 23:59:11.84ID:3uGG3SyO
>>25
>このように波カッコを使えば

コードブロックの表現に波括弧やキーワードを使うのか
それともインデントを使うのかとは関係なくない?

Pythonが複数行のlambdaを書けないのはPython特有の問題だし
PythonのAPI設計がオブジェクト指向的じゃないのもPython特有の問題でインデントとは関係ない
2020/09/08(火) 00:06:33.87ID:d82mVcHe
単なる癖づけの問題で、多数派の方が楽だよねって思うが。
282
垢版 |
2020/09/08(火) 00:37:25.12ID:1GKR+zTs
>>26
そもそも>>25のコードでは波カッコを使っていない、というオチは置いといて(苦笑
 [1,4,3,2].sort.reverse.map(&:to_s).join('-')

>>25で書いたように、Pythonが誕生した手続き型プログラミングが主流の時代には、
 > コードブロックの表現に波括弧やキーワードを使うのか
 > それともインデントを使うのかとは
大いに関係がありました(過去形)
Pascal の begin..end を使うのかCの{..}を使うのか、いやそもそもブロック表現は
具象構文にインデントを取り込めば..といった論争です(Occamといふ言語をしていますか?)
今となっては当時を知らない若手か老害しか興味を持たないようなつまらない話題です

おっしゃるように問題は、元々は1980年代の設計思想(手続き型パラダイム)で設計されて誕生し、
時代時代の流行を追いかけて後方互換性を断絶するような改変(Python2->3)を強行してもなお、
中途半端な関数型プログラミンングやオブジェクト指向プログラミングしか
書けないPythonの現状にあるわけです

で、あなたはこの現状を正確に認識した上で、そんな言語を「ぶっちゃけ始めるのにいい言語」として
他人にお薦めしますか?
もちろん実世界の閉じた世界で何も知らない初心者を相手にして、優越感に浸る手段とはなるのでしょうけれど
2020/09/08(火) 09:26:52.11ID:01u98+/t
評価軸の1つとしてそういうことを気にする人もいるというのはわからないでもないけど、Pythonは普通に「ぶっちゃけ始めるのにいい言語」としては上位の方でしょ。
お勧めリストとして、RubyをPytnonより上位に位置付ける人よりも、その逆の人の方が圧倒的に多いと思うけど。
2020/09/08(火) 17:57:04.25ID:Rm9gieqX
インデントしてりゃそれが制御の範囲を示すんだって頭が
できちゃうのは副作用でかくないか?
2020/09/08(火) 18:09:43.81ID:jZ8u+myy
>>28
>大いに関係がありました(過去形)

何と何が関係あるって言ってるの?

左から右へ流れるようにコードが書けるということと
コードブロックの表現に何を使うかということは関係ないってのが>>26の指摘
普通はやらないけどPythonでも左から右に書けないわけじゃない
pipe([1,4,3,2], sorted, reversed, map(str), '-'.join)

上の話と初心者にPython勧めるかどうかは全く別の話
2020/09/08(火) 20:03:16.04ID:4Q+xgnjB
なんかやべーやつが居座ってるスレなのは把握
2020/09/08(火) 22:56:44.01ID:WZqhOJW2
>>30
そこまで頭の悪い人はいないでしょ。
「VBAから入ると変数宣言はDimでやるんだという頭ができちゃうから副作用がでかい」とか考えるならそうかもしれないが。

両方やった上でインデントが強制されるのは窮屈だから御免被りたいという意見は十分ありうるとは思うが。
2020/09/08(火) 23:11:58.53ID:txiCBqFi
「流れるように」
2020/09/09(水) 00:49:52.32ID:U+WWUaPe
インデントはデメリットに比べてメリットが小さすぎるから採用言語が少ない
2020/09/09(水) 06:16:15.19ID:+wID2zCZ
行数が減るメリットは小さくないと思うが。閉じ括弧やendが不要なのでまず1行分減るし、開き括弧やbeginで1行使う流儀ならさらにもう1行分減らすことができる。

オフサイドルールを採用する言語が今のところ少ない理由は、メリットの少なさというよりも、インデントを強制されるのは窮屈に感じるという気質の人が、プログラマには少なくないからではないかと思う。
Pythonの人気でそれが今後変わるのか変わらないのかは分からないが……。
2020/09/09(水) 09:30:03.91ID:DjXMW823
字下げスタイルはどれが好き?
C#はオールマンスタイル、Javaはカーネルスタイルが主流だけど
2020/09/09(水) 10:35:12.03ID:UWAKNRKG
オールマンが見易くて好きだな
行はその分増えちゃうけど現代では困ることもないでしょう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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