みずまずぷろぐらみんぐ日記

日々学んだことや頭に浮かんだことを、そこはかとなく書き連ねます

yarnコマンド

こんにちは、前回の投稿の翌日ちゃんと最後のC問題をACしたみずまずです。

ABSも修了したので、これからは本格的に過去問をこなしてコンテストに参加し、レートを上げていくことになります。

早く茶色になりたいな(灰色は色が薄くて嬉しくないので)。

周りに少しでも近づきたい。

と言いつつ、今日の本題は競プロではありません。

yarn run

です。

私は普段N予備校さんの【2020年度】プログラミング入門Webアプリ という講座と、AtCoderさんでプログラミングの学習を進めています。

そのN予備の入門講座で現在Node.jsを使いSlack上で動くBotを作っています。

Botのお仕事をモジュールとして実装すること自体は特に問題なくできたのですが、実装した機能をテストするところである疑問が…。



教材「コンソールでyarn testを実行します。」



みずまず「yarn testね、どれどれ。」



み「やったね!テスト成功!」



み「………………。」



み「いや、yarn testってなんだよ。」



yarnってパッケージマネージャでは?yarn test?node testとかじゃなくて?

PCさんも普通に応えてくれちゃってるけどえ?どういうこと?


今までyarnはパッケージのインストールにしか使わなかったので、私の中でyarnと言えばyarn addだったのです。


最初にパッケージの設定ファイル(package.json)で

"scripts": {"test": "node test.js"},

と設定したことは覚えていました。

動作をテストするためのtest.jsというファイルを記述したことも覚えています。


しかしどうしてそのtestファイルがyarnコマンドで実行できるのかわからなかったのです。


これはまずyarnコマンドでどんなことができるかよく知らなかったこと、そして設定ファイルの"scripts"がどんな意味を持つのかわかっていなかったことが原因でした。


調べてみたところ…

・yarnにはaddとかremoveだけでなく他にいくつもコマンドがある。

・yarn run (スクリプト) で設定ファイルの"scripts"オブジェクトに定義したスクリプトを実行できる。

 (今回の場合yarn run test == yarn run node test.js みたいな感じ。node test.jsやってたんだ!感動!w)

・さらに が他のコマンド(add,remove等)とかぶっていなければ、runは省略できる。

 (testはもともと用意されているコマンドにないので省略してrunを問題なし)

・この機能は開発者が動作の確認とかを簡単にできて便利らしい。



こういうことでした。

runの存在すら知らないまま省略されたコマンドを見たため、何が何だか分からなくなっていました。

私が映像授業派ではなくテキスト教材派なのも関係あるかもしれませんが、はじめの頃に比べてテキストを進めていると疑問が浮かぶことが多くなってきたように思います。

フォーラム(N予備校に用意されている質問の場)で他の方の質問&回答を読んで解決することもありますが、自分で調べて解決したことで教材を使っているかいないか関係なく誰かも調べるかもしれない情報は、小さなことでも簡単なことでも、こうやってこれからどんどん発信していこうと思います。

よろしくお願いします。

あとがき

そうそう、今日は日曜日ですね。

昨日の東京海上日動プログラミングコンテスト2020には参加できませんでしたが、今夜のABC170には勿論参加します。

頑張ってきます💪

参考にしたサイト

classic.yarnpkg.com

はじめての C問題挑戦!

ABS(AtCoder Beginners Selection)

昨日からABS(AtCoder Beginners Selection)に取り組み始めました。昨日はA問題とB問題の計8問を解いたので、今日は残りのC問題を解いていきます。

ABC085C Otoshidama

1パターンでも見つかればOKなので全部調べる必要はない→多重ループを一気に抜けたいな→goto文の出番か?と言うことでAPG4bで知ったgotoを初めて使った。

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, Y;
  cin >> n >> Y;
  //x+y+z=n,10000x+5000y+1000z=Y => 10x+5y+z=Y/1000
  for (int x = 0; x <= n; x++) {
    for (int y = 0; y <= n - x; y++) {
      int z = n - x - y;
      if (10*x + 5*y + z == Y / 1000) {
        cout << x << ' ' << y << ' ' << z;//多重ループ抜ける
        goto OUT;
      }
    }
  }
  cout << "-1 -1 -1";
  OUT:
}

(学習した内容が実戦で思い浮かんで、自分で使えるようになる瞬間って嬉しいね)
……のは良いのだが

エラー。

何もおかしくないと思うのになーと思いつつエラー出力を見てみる。

え~~、'}'の数も合ってますが。

ここでAPG4bの解説*1を思い出す。


"goto文はシンプルな機能ですが、シンプルすぎるためにプログラムが何を意図しているのか分かりにくいことをはじめ、いくつかの落とし穴があります。"


"いくつかの落とし穴があります。"


もしやラベル(この場合OUT)で終わることはできなくて、後に何か処理がないと使えないのか?
しかしもう何もする処理がない。
そう言えばmain関数はreturnを省略してるとかこれまたAPG4bの関数の節で読んだ気がする……のでこうしてみた。

  OUT:
  return 0;
}

通りました。

goto文

これを機会にgoto文についてリファレンスを読んでみました。

goto 文 - cppreference.com

なるほどね。
そもそもこのgoto文、"ラベル : 飛ぶ先の文"という使い方をするためのものでした。
つまりラベルの後には何らかの"文"が必要。(goto"文"ってそういうこと?)ないとエラーになる。
今回return 0;を入れたのは…まぁだいたい合ってました?←
今後こういうブロックの最後なんかにラベル置く時は、空文( ;)ってのを入れることにします。

初陣のコンテスト(ABC169)ではA問題しかACできなかったこともあり"C問題なんて自分には早いのでは?"と思っていましたが、この問題をACしたことで"自分でも(解ける問題は)解ける"ということがわかり、少し自信が持てました。

ABC086C Traveling

ということで調子に乗って残り2問もさらっとAC~~~

…できれば良かったのですが、ぇ…何これ難しい()

比較的方針が見えたこちらの問題を何とか形にして提出してみるのだが、最後のafter_contest_01というテストケースだけ通らない。
いや自分合ってるし!これ以上どこも直すとこないもん!
と、ひねくれかけたその瞬間

ありました。

はい、私が悪かったです。

xとyのマイナスの移動を考慮していませんでした。

そういえば絶対値ってどうすんだ?場合分けとかそんな面倒なことするのか?と思いググってみると、abs関数という便利なものがすぐに見つかりました。
該当箇所に使ってみたらあっさりAC。
………ジャッジって凄いですね。ほんとにジャッジしてるんですね。

今日もまた新しい知識が増えました^^


え?あと1問残ってないかって?

それは………明日やりますので(;^ω^)

atcoder.jp

はじめまして

ブログ始め〼

あいさつと概要

プログラミングの学習を本格的に始めた当初からアウトプットの場として、また就活においてアピール材料となる学習記録を残すためにも、技術ブログを書いた方が良いと知人に教えてもらっていたものの、

"超ビギナーの自分が技術ブログ…書ける内容はもう何人も書いているようなことしかないし………。"

"Qiitaは読む分には良いけど、投稿するとなると敷居が高いんだよなぁ"
と、なかなか実行できずにいました。

 

そのかわり毎日PCのメモ帳に何をやったのか、どう感じたのか、何で苦労し、どう解決したのか、目標ややってみたいこと等を書き溜めていたのですが、学習開始から1ヶ月、

"メモに書いてるだけなの勿体無いな…。この気持ちを、この気づきを、誰かに聞いてほしい!"

と思うようになり、このタイミングを逃すまいとブログを始めました。

 

とは言ってもいきなり皆に参考にされるQiitaの人気記事なんて書けないので、基本的には自由に投稿しやすいこのはてなブログで学習記録なんかをマイペースに発信していこうと思います。

今はまだ誰の役にも立たない独り言の集まりでも、そのうち自分と同じくゼロから"プログラミングをやってみたい!"と思った人の参考や、道しるべになるようなブログになれば良いなと思っていますし、いつかは誰かの"わからない"を解決するような技術的内容ある記事も載せられるようにしたいと思っています。

 

またもしもこのブログの内容に誤りや誤解を招く表現、別の方法やより良い方法等ありましたら、是非ともコメントをお願いします。

自己紹介

・北の大学を中退し求職中の20代
・女
・日本のど田舎在住
・コーヒーとアニメと(画面の中の)猫が癒し

学習中の分野、使用コンテンツ・SNS

PythonJavaScriptC++Linux
競技プログラミングAtCoderN予備校
github・Qiita・Slack
Twitter(@mizumazu_comma )