本日の学習java

プログラム基本スタイル

ヌルプログラム

javaの最も単純なプログラム。プログラムとして、成立しているものの、何も処理を行わない。 このヌルプログラムに命令を追加することで、javaプログラムが作られて行く。

class className {
  public static void main(String[] args) {
   //  命令文
  }
}

命令コードをjavaでは「文」と呼ぶ。 文の終端は必ず「;(セミコロン)」を付ける。 ;が無く改行された場合には、次の;が行が来るまで、一つの命令として扱われる。 例外として、""で囲まれた文字列は一行で書く必要があり、""内で改行するとエラーが発生する。

改行なし:OK
System.out.println("Hello World");

改行在り:OK
System.
      out.
         println("Hello World");

""内改行:NG
System.out.println("Hello
      World");

出力メソッド

  • println:出力した文字列の最後に改行を入れる。
  • print:出力した文字列の最後に改行を入れない。 printで改行する場合は、「\n」の改行コードを使用する。

良く分からい現象

f:id:cwarlen:20210717172317p:plain

mac,vscode,jdk16
printで出力したときに、コンソールの出力行の最後のに%の崩れた状態が出力されるのは、なんだろうか?

「ゼロからわかる Java超入門 改訂3版」を参照しながらJava学習開始

java学習環境作成 windows

JDKのダウンロードとインストール

参考書にはバージョンの指定がなかったため、最新の16.0.1をインストール(参考書では、14)

ダウンロード

JDKで検索し、公式サイトから最新版をダウンロード

インストール

  1. . ZIPファイルの展開
  2. . 展開したファイルを自分の使いたい場所に移動
  3. . 環境変数パスの設定

環境変数パス設定

参考書(エラー)

ユーザー環境変数へ登録

  1. . 環境変数名「JAVA_HOME」、値「展開したJavaディレクトリパス」を作成
  2. . 環境変数名「Path」に値「**/Java/binディレクトリパス」を追加
  3. . 動作確認 javac -version バージョン表示確認設定OK

参考書の動作確認はここまででしたが、次の工程でjavacではなくjavaのコマンドを実行したところエラー発生。

Error opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find Java.dll
Error: could not find Java SE Runtime Environment

原因 ネットで調べたところ、javaより先にsystem32を参照していることが原因とのこと。

対策 Path内の順序を入れかる。(取り敢えず一番上に)

結果 エラー解消ならず。

原因の考察 ユーザー環境変数では、system32が元から登録されていない。 system32より上位に登録するためには、システム環境変数へ登録する必要がある。

実際(解決)

システム環境変数へ登録(ユーザー環境変数を元に戻してから)

  1. . 環境変数名「JAVA_HOME」、値「展開したJavaディレクトリパス」を作成
  2. . 環境変数名「Path」に値「**/Java/binディレクトリパス」を追加
    1. 1で環境変数を登録しているため、環境変数パスを使用し「%JAVA_HOME%/bin」で登録
    2. 読み込み順序を一番上に設定
  3. . 動作確認
    1. javac -version バージョン表示確認設定OK
    2. java -version バージョン表示確認設定OK

まとめ

参考書はこちらの環境が「何もしていない」ことを前提に作られている。 そのため、以前設定したことが新しくやろうとすることに干渉することがある。 参考書はあくまで基本に則った必要最低限なので、ネットなどを活用して自分の環境に合わせて設定していく必要がある。

macの入力環境を整える mac>Kanabiner

macの入力環境を整える

現状

Kanabinerでキーマップを変更できるようにし、キーパッド入力を可能にする

  • 「Complex modifications」の先人が残してくれた「Numeric Keypad」をアレンジして使用中
  • tabキーと押下状態で、キーパッド入力状態
使用キー 出力
英数 tab
kana 0
m 1
, 2
. 3
j 4
k 5
l 6
u 7
i 8
o 9
r_cmd .
n tab
y shift + tab
h BS
/ enter
; +
p -
0 *
9 /
8 =
7 BS
:(全角) :(半角)

変更内容

%記号の入力を追加する

  • オリジナルでも%は入力に含まれていなかったため追加
  • 追加に伴い、マッピングを変更(重複していたBSを変更)

変更後

使用キー 出力
8 %(shift + 5)
7 =

ポイント
変更したい、Keypad keysに%が存在しないため、「shift + 5」を使用した。
英数・かなの入力状態で半角・全角が変わってしまうため、入力状態に応じて、処理内容を変更させる。

{
  // 8(かな):%
  "type": "basic",
  "from": {
    "key_code": "8"
  },
  "to": [
    { "modifiers": ["shift"], "key_code": "5" },
    { "key_code": "f8" },
    { "key_code": "keypad_enter" }
  ],
  "conditions": [
    {
      "input_sources": [
        {
          "language": "ja"
        }
      ],
      "type": "input_source_if"
    },
    {
      "type": "variable_if",
      "name": "numeric_keypad_mode",
      "value": 1
    }
  ]
}, // 8(かな):%
{
  // 8(英数):%
  "type": "basic",
  "from": {
    "key_code": "8"
  },
  "to": [
    { "modifiers": ["shift"], "key_code": "5" },
    { "key_code": "f8" }
  ],
  "conditions": [
    {
      "type": "variable_if",
      "name": "numeric_keypad_mode",
      "value": 1
    }
  ]
} // 8(英数):%

お願い

%記号をもっとスマートに入力できる方法があれば教えて下さい。

学習のための環境づくり(agコマンド)

ag (The Silver Searcher) コマンド

agコマンドは、ディレクトリからファイル内の文字列を検索し、ヒットしたファイルを出力するコマンドです。 特殊なことをしなくても日本語を検索してくれるため、勉強には丁度いいと思います。 メモは書いたけど、どのファイルに書いたか分からなくなってしまったときなどに非常に助かります。

インストールや使い方の詳細は、ネットで検索すればいろいろ出てきますので、検索してみてください。

gitの操作>作業の取消

コードを試して、駄目だった場合に、確実迅速に試したコードを取り消して、元に戻せる。

  1. 現在の作業の完全な取消 git clean -df .
  2. git管理下にある変更分の削除(新規増加分のファイルは残る) git checkout .

Bootstrapでマークアップ マージンなどで、左右を個別に指定する

Bootstrapのバージョンによって、記述に若干の差異がある。

多分()は古いバージョンと思われる。

上側のマージン        .mt-0
右側のマージン       .me-0(mr)
下側のマージン       .mb-0
左側のマージン       .ms-0(ml)
左右のマージン       .mx-0
上下のマージン       .my-0
全方向のマージン    .m-0

r,l:right,leftなら覚えやすいが、今は変わってしまった模様。 e,s:end(右),start(左)らしい

Bootstrapでマークアップ 要素の上下位置指定

上下位置が動かない件

原因 要素の縦タイズを指定していなかった。 気づけば当たり前の話、要素のサイズが指定されていなければ、要素内の位置も指定できない。

<div class="vh-100 d-flex align-items-center">...</div>

気づかなかった原因 divで囲うと要素の横のサイズは横一杯になるため、横はサイズ指定をしなくても位置指定が適応されていた。