scala-text / scala_text Goto Github PK
View Code? Open in Web Editor NEWScala学習用テキスト
Home Page: https://scala-text.github.io/scala_text/
License: Other
Scala学習用テキスト
Home Page: https://scala-text.github.io/scala_text/
License: Other
http://dwango.github.io/scala_text/type-parameter.html
解答を移したり表示方法変えて整理したから間違って消えたのではなく、最初から無かったっぽい?
Monadの規則の紹介ではleftIdentityLawとrightIdentityLawとLawがついているのに対して、Monoidの規則の紹介ではleftIdentityとrightIdentityになっており、Lawがついていない
https://github.com/dwango/scala_text/blob/master/src/typeclass.md
社内チャットより引用
つまりabstract overrideはsuperの束縛を具象クラスを作るまで遅延させる機能と言えるでしょう。
これってそもそもabstract overrideでなくとも(つまり、ただのtraitでsuperを使った場合でも)線形化により、superが指す対象は変わるので、微妙に正しくない気がした
現状以下のようになっているが
よく利用されるWebフレームワークであるPlay Frameworkの中では現在Specs2が採用されているのですが、マクロによるpower assertが便利なため、今回はscalatestを利用します。
という意味では、不正確というか説明不足?
(ただし、playのユーザーとは別に、play本体のテストは現状でもspecs2、という違う観点はあるが)
@pocketberserker さんがテストの章色々書き直し and 書き足しをしてるので、その変更も任せるか、ここだけ先に書きなおすか、みたいな状態
コレクションの章では、ListやMap、Vectorといったデータ構造が紹介されているが、性能の議論をするうえではこれらのデータ構造がどのような実装になっているのか、ということはおさえておいた方がよいと思われる。
そこで、Vectorなどのデータ構造がどのように実装できるのかという話題を、ケースクラスの章の後などに追加するのがよいと思う。
i am installed your csgo web based match finder project
https://github.com/Thiry1/CSGO_Match_Finder
and i getting this error pls can u fix ?
def leftIdentity[F](a: F)(implicit F: Monoid[F]): Boolean = a == F.append(F.zero, a) def rightIdentity[F](a: F)(implicit F: Monoid[F]): Boolean = a == F.append(a, F.zero)
これに加えて、
def associativeLaw[F](a: F, b: F, c: F)(implicit F: Monoid[F]): Boolean = {
F.append(F.append(a, b), c) == F.append(a, F.append(b, c))
}
が必要なのではないかと。
型クラスの章などに、次の文書で説明されているような3つの多相性について述べて、型クラスのモチベーションについて説明するような文章を追加したい。
http://www.fos.kuis.kyoto-u.ac.jp/~igarashi/class/sf07w/resume6.pdf
また、「サブタイプ多相 vs アドホック多相」や「オーバーロード vs 型クラス」など進んだ話題に言及してもよいかもしれない。
理由は主に二点。
https://github.com/dwango/scala_text/blob/master/src/control-syntax.md#%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C-control_syntax_ex2
「???
の部分を埋めてください。」とあるが、解答例は???
以外の部分にvar i = 0
と書いている。
identity (id関数)が初出だが、その説明がされていない。
https://github.com/dwango/scala_text/blob/master/src/typeclass.md
さて、このようにファイルを配置したらsandboxディレクトリに入り、sbtを起動します。するとsbtのプロンプトが出て、sbtのコマンドが入力できるようになります。
というところで、ここまで sbt console
しか出てこなかったので、 盲目的に sbt console
を使うものだと誤解してしまう例が見られました。起動方法に関する注釈が必要そうです。
まだScala 2.12がfinalではないので優先度低めだが(?)、ひとまずメモしておく。簡単に書き換え可能なものは、今のうちに先に書き換えてしまう?もしくは、非推奨になることを軽く言及する?
https://github.com/dwango/scala_text/pull/98 で使用しているので、もしそれがmergeされるなら。mergeされた
あたりをまず決める?
★が全くない章もあるのである程度統一が必要そうだと思いました。
https://y-yu.github.io/scala_text_pdf/scala_text.pdf#page=3
選択肢
abstract override
など、補足的な節であるという目印を除いて、難易度表記自体を削除してしまう。(追記)たまたまtravis上のcacheがあるおかげで動いてただけかもしれない。そもそも最初にtravis-ci設定した時も似たような状況になったが、いろいろと詳細不明
https://travis-ci.org/dwango/scala_text/builds/110520573#L281
--\/|\|/-\\\\--/|\/||\npm WARN deprecated [email protected]: this package has been reintegrated into npm and is now out of date with respect to npm
> [email protected] install /home/travis/build/dwango/scala_text/node_modules/sleep
> node-gyp rebuild
\\/ake: Entering directory `/home/travis/build/dwango/scala_text/node_modules/sleep/build'
CXX(target) Release/obj.target/node_sleep/sleep.o
|In file included from ../sleep.cc:2:0:
../node_modules/nan/nan.h:41:3: error: #error This version of node/NAN/v8 requires a C++11 compiler
/ /home/travis/.node-gyp/4.2.6/include/node/node.h:42:0,
from ../node_modules/nan/nan.h:45,
from ../sleep.cc:2:
/home/travis/.node-gyp/4.2.6/include/node/v8.h:336:1: error: expected unqualified-id before ‘using’
/home/travis/.node-gyp/4.2.6/include/node/v8.h:469:1: error: expected unqualified-id before ‘using’
/home/travis/.node-gyp/4.2.6/include/node/v8.h:852:1: error: expected unqualified-id before ‘using’
\ ../node_modules/nan/nan.h:194:0,
from ../sleep.cc:2:
../node_modules/nan/nan_maybe_43_inl.h:13:1: error: expected unqualified-id before ‘using’
../node_modules/nan/nan_maybe_43_inl.h:16:1: error: expected unqualified-id before ‘using’
../node_modules/nan/nan_maybe_43_inl.h:19:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:24:12: error: ‘Maybe’ does not name a type
loopFrom0To9
は次のような形になります」とあるが、定義されている関数名はloop0To9
となっている。sealed abstract class PostalCodeResult
case class Success(postalCode: String) extends PostalCodeResult
abstract class Failure extends PostalCodeResult
case class UserNotFound() extends Failure
case class UserNotHasAddress() extends Failure
case class AddressNotFound() extends Failure
case class AddressNotHasPostalCode() extends Failure
で、UserNotFound
, UserNotHasAddress
,AddressNotFound
,AddressNotHasPostalCode
はcase object
にできる。
C言語のフォールスルー動作を引き継いだことはしばしば非難されることもあります
これは
C言語のフォールスルー動作を引き継いだことはしばしば非難されます
が適切(「~こともある」、と、「しばしば~」で意味が重複している)。
現時点で思いつく選択肢を列挙
http://dwango.github.io/scala_text/answer.html
で、問題本文も添付することで多少探しやすいようになっているけど、回答集の方にリンクあるようにしたい…(練習問題の方にpermalink付加できればよい?gitbookでそうするの、どうすればいいのだろう…)
Promiseは一度だけ成功と定義した値または値と定義した処理を与えることでFutureに変換できる型
というの、なんかわかりずらいと感じるのは自分だけでしょうか?(いや、自分だけだったらcloseしていいです)
少なくとも、どこかに 読点 、
があったほうがいいような・・・?
もしくはみんなわかりずらいと感じるなら、その文書き直してもいいけれど
出題する際の文言についてです。
https://github.com/dwango/scala_text/blob/master/src/control-syntax.md などで
以上のコードを利用して、 最初と最後の文字が同じアルファベットであるランダムな5文字の文字列を1000回出力してください。
とあります。この場合、forで回しながら都度printlnを呼ぶ副作用のある関数を作成する実装方法を最初に思いつく人もいると思うのですが、
以上のコードを利用して、 最初と最後の文字が同じアルファベットであるランダムな5文字の文字列が1000個含まれるリストを返す関数を作成してください。
のようにすれば List[String]
を返すような、よりScalaらしい副作用のない関数を作る方法を学びやすいのではないかと思いました。
Javaのものとほぼ同じです。
Java と違って break, continue がない、あるいは scala.util.control.Breaks
を使うというのは補足しておいた方がいいかもしれません。
10章の下限境界の項目
http://dwango.github.io/scala_text/type-parameter.html#%E4%B8%8B%E9%99%90%E5%A2%83%E7%95%8C%EF%BC%88lower-bounds%EF%BC%89
で、「共変な型パラメータT」とありますが、TではなくEな気がします。
Play 2 Scala Webアプリケーションフレームワークを用いたWebアプリケーションを開発できるようになること
や、また
Playフレームワークは、Scalaの言語開発者たちが設立したTypesafe社でメンテナンスされていることもあり、Scalaの中では最も人気のあるWebフレームワークになっています。ドワンゴでも広く採用されており、新卒のみなさんが目にする機会も多くなるでしょう。
といった記述があるが、今回公開した部分にplay frameworkの具体的な使い方の記述などはないため、変なことになっている?
変位指定はあるが、型パラメータの境界についての言及はないので追加したい
以下の表記で優先度を付けたほうが良さそうです。
本テキストでは、節や項ごとに、どの程度重要かを示すために★マークを付けていることがあります。以下に基準を示しますので、参考にしてください。
★★★: 必ず読むべき(must)
★★:読んだ方がいい(should)
★:読むといいかも(may)
https://github.com/dwango/scala_text/blob/master/src/typeclass.md
http://dwango.github.io/scala_text/error-handling.html
「Optionの入れをを解消することができます。」
ドワンゴさん、お世話になっております。はてなの教科書でも勉強していたのですが、
https://github.com/hatena/Hatena-Textbook/blob/master/web-application-development-scala.md
Scalatraではなく、Play2の最新版で、Akka+Slickで非同期にMySQLを使った
CRUD+WebSocket+Ajaxも扱って欲しいです。
http://www.slideshare.net/yugolf/typesafe-reactiveplatformreactivesystem-scalasummitkansai
13章(ケースクラスとパターンマッチング)の木構造の問題で、解答例のmax(min)はBranch(v, Empty, Empty)がきたときに例外を投げてしまいます
公開された後、できるだけはやく @xuwei-k がやる予定。
公開前に準備できる部分は準備済。
自動でtravis-ciからgh-pages branchへpublishまでする予定
見るのに支障がでるレベルで遅いので原因調査&対策が必要そうです・・。
誰か日本語詳しい人・・・。面倒なら "ひらがな" にするか、"計測する" みたいに別の言葉で言い換えるか
http://dwango.github.io/scala_text/future-and-promise.html
まだ実装時間に余裕がある場合は、Semaphore(セマフォ)という常に特定個数ずつしか実行されない処理を実装してみましょう。
とあるが、答えがない。
そもそも問題として可能か、詳細な要件書かなくていいのか?、レベルとして適切か?などを考えて、この問題の答え以前に、別の問題入れるなどを検討するのもありかもしれない?
いずれにせよ、もし可能なら答えあるに越したことはないので、優先度それほど高くない(?)が、issueにしておく
sbtのversion確認方法は状況により異なり、sbt --version
では動作しない場合がある。
https://github.com/dwango/scala_text/blob/master/src/sbt-install.md
tut:invisible
使ってその場で書く
answer.md
から順次削除immutableといっているし、(いずれにせよmutableだとしても) isEmpty などは副作用はないはずなので、
def isEmpty()
ではなく def isEmpty
にしておくべきではないか?
def pop()
もある意味同様の問題があるが、空の場合は例外投げるので、副作用あると捉えることも可能(?)なので、微妙に別問題?
気がついてないだけで、同様の問題は他にもあるかもしれない
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.