毎回検索するのも面倒なので自分のブログにメモ。
.emacsに下記を記載する。
(setq make-backup-files nil) (setq auto-save-default nil)
(setq make-backup-files nil) (setq auto-save-default nil)
auのhtc u11で歩きながら操作するといきなりバイブがなって画面全体に出る「やめましょう歩きスマホ」。
わかるけど邪魔ですよね。
というわけで消し方。
【設定】→【au設定メニュー】→【歩きスマホ注意アプリ】
と進んで、ONになっているトグルをOFFにして下さい。
DB::enableQueryLog();
$table1 = DB::table('table1')->where('id', $no)->first();
// $results = DB::select('select * from table1 where id = ?', [1]);
logger()->debug(DB::getQueryLog());
[2017-07-12 03:01:50] local.DEBUG: array (
0 =>
array (
'query' => '
select
*
from
table1
where
value like \'%\' || \'?\' || \'%\';',
'bindings' =>
array (
0 => '1',
),
'time' => 1,
),
)
'log_level' => env('APP_LOG_LEVEL', 'debug')
.scrollbars-visible-always {
/deep/ ::-webkit-scrollbar {
width: 15px;
height: 15px;
&-track {
border: 10px;
border-radius: 10px;
background-color: rgba(100, 100, 100, 1) !important;
}
&-thumb {
background-color: rgba(200, 200, 200, 0.7) !important;
border: 10px;
border-radius: 10px;
}
}
}
するとこんな感じで太くて丸くなりました!
<?php
Route::get('/', function () {
return view('welcome');
});
// Viewを指定するパターン
Route::get('test', function () {
//return view('test');
return view('test', ['name' => 'Viewを指定']);
});
// 直接文字列を返すパターン
Route::get('helloworld', function () {
return 'HelloWorld';
});
// Controller使用するパターン
Route::get('user/{id}', 'TestController@show');
// Ajax(とりあえず簡単なGetでお試し)
Route::get('ajaxTest', 'TestController@ajax');
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use DB;
class TestController extends Controller
{
/**
* 指定ユーザのプロフィール表示
*
* @param int $id
* @return Response
*/
public function show($id)
{
// 下記はMariaDBへの接続サンプル
//$table1 = DB::table('table1')->where('id', 2)->first();
//$result = $this->addText($id) . $table1->value;
return view('test', ['name' => $id]);
}
/**
* Ajax通信のサンプル
* @return [type] [description]
*/
public function ajax()
{
// 簡単にやるなら配列返すのでもOK
// return ["data" => "Ajax success"];
return response()->json(
['data' => 'Ajax success'],
200,[],
JSON_UNESCAPED_UNICODE
);
}
/**
* ローカルメソッドのサンプル
* @param [type] $val [description]
*/
private function addText($val)
{
$val2 = '';
return $val . '-add string-';
}
}
<!DOCTYPE HTML>
<html lang="ja">
<html>
<head>
<meta charset="UTF-8">
<title>アプリ名 - @yield('title')</title>
<!-- CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<style type="text/css">
<!--
hr {
border: 0;
border-bottom: 1px dashed #ccc;
background: #999;
}
@yield('css')
-->
</style>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script type="text/javascript">
<!--
@yield('js')
-->
</script>
</head>
<body>
@section('header')
<hr>
ここがメインのヘッダ
<hr>
@show
<div class="container">
@yield('content')
</div>
@section('footer')
<hr>
ここがメインのフッター
@show
</body>
</html>
@extends('layouts.app')
@section('title', 'これがサブのタイトルになります')
@section('css')
@endsection
@section('js')
$(function() {
$("#button_a").on("click", function() {
alert("aaaaaaaaa");
});
$("#button_b").on("click", function() {
$.ajax(
'../ajaxTest',
{
type: 'get',
data: { 'no': 'aaaaaaaa' },
dataType: 'json'
}
)
// 検索成功時にはページに結果を反映
.done(function(data) {
alert(data.data);
})
// 検索失敗時には、その旨をダイアログ表示
.fail(function() {
window.alert('正しい結果を得られませんでした。');
});
});
});
@endsection
@section('header')
@parent
<p>ここはサブのヘッダ</p>
<hr>
@endsection
@section('content')
<p>ここが本文のコンテンツ</p>
@for($i = 1; $i <= 10; $i++)
<p>Hello, {{$name}}</p>
@endfor
<p>
<a id="button_a" class="btn btn-lg btn-success" href="#" role="button">Push</a>
<a id="button_b" class="btn btn-lg btn-info" href="#" role="button">Push</a>
</p>
@endsection
@section('footer')
@parent
@endsection
<VirtualHost "laravel.local:80"> #ServerName laravel.local #ServerAdmin webmaster@localhost DocumentRoot "C:/xampp/htdocs/app_laravel/public" ErrorLog "logs/dummy-host2.example.com-error.log" CustomLog "logs/dummy-host2.example.com-access.log" common <Directory "C:/xampp/htdocs/app_laravel/public"> AllowOverride All </Directory> </VirtualHost>
コノスル日本語公式サイトより白葡萄品種、人気No.1のシャルドネ。
爽やかなシトラスの香りにトロピカルな果実味が感じられる、
豊かでバランスのよい白ワイン。外観は黄金がかったきれいなイエローで、若々しい印象です。溌剌とした中に、複雑さも感じさせます。フレッシュなシトラスのアロマ、白桃を思わせる果実香に、ミネラルのヒント。ミネラルを感じさせる複雑な果実香が口内に広がります。ヴァラエタル・シリーズのシャルドネは若々しくフレッシュ。バランス良く、きれいな酸が感じられます。
select
a.SID,
b.PIECE,
a.SQL_ID,
b.SQL_TEXT
from
v$session a, v$sqltext b
where
a.SQL_ID = b.SQL_ID
and a.TYPE = 'USER'
order by
3,2
アサヒワインコムよりトロピカルフルーツやピーチを想わせる豊かな果実味とコクのある味わいが特徴の、なめらかな飲み口の辛口白ワインです。
熟したグレープフルーツ、アプリコット、トロピカルフルーツ、パイナップル、ナッツ、白桃、クルミ、ミネラル香と若干のスモーク香など、複雑で芳醇なアロマ。リッチな果実味とクリーンな透明感が同居する辛口ワインです。KIRINの公式ホームページより
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ListView
val lv = findViewById(R.id.list_view) as ListView
val list_items = listOf("1", "2", "3")
// アダプタをセット
val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list_items)
lv.adapter = adapter
}
}
Wikipediaより2008年(平成20年)6月14日に運転を開始し、東上本線の有料列車としては特急「フライング東上」号以来約50年ぶりとなる。ただし「TJライナー」は「フライング東上」と異なり、この名称を愛称としてだけではなく、愛称を兼ねた正式な列車種別名としている。シンボルカラー(ロゴマーク)は青を基調とする。停車駅案内・駅時刻表においての色は橙を使用。
public class StringUtil {
/**
* パラメータを3桁カンマ区切り数字として返す。
* @param number 処理対象文字列
* @return フォーマット後文字列
*/
public static String formatComma(String number) {
if (!NumberUtils.isCreatable(number)) {
return number;
}
NumberFormat nfNum = NumberFormat.getNumberInstance();
return nfNum.format(Double.parseDouble(number));
}
/**
* パラメータの文字列を、パラメータの最大文字数で切って返す。
*
* nullの場合ブランクを返す。
* 文字数以内の場合文字列をそのまま返す。
* 指定文字数を超える場合は文字数で切った文字列を返す。
*
* @param target 処理対象文字列
* @param length 文字数
* @return 処理後文字列
*/
public static String split(String target, int length) {
String res = null;
if (StringUtils.isEmpty(target)) {
res = "";
} else if (target.length() > length) {
res = target.substring(0, length);
} else {
res = target;
}
return res;
}
/**
* 引数の文字列をSHA-256で暗号化して、16進数エンコードする。
* ※base64でもエンコード出来るが、その場合、文字数が64文字以下になる。
* @param pass
* @return
*/
public static String encode(String pass) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {// 発生しない
e.printStackTrace();
}
md.update(pass.getBytes());
byte[] digest = md.digest();
// 16 進数文字列として出力
StringBuilder sb = new StringBuilder();
for(byte b : digest) {
String hex = String.format("%02x", b); // 16 進数 2 桁として表示 (1byte は 00 ~ ff)
sb.append(hex);
}
String result = sb.toString();
if (result.length() > 64) {
result = result.substring(0, 64);
}
return result;
}
/**
* ランダムな32文字の文字列を生成する。
* CSRF攻撃対策用のトークンとして使用する。
* @return
*/
public static String getRandomToken() {
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[32];
random.nextBytes(bytes);
// 16 進数文字列として出力
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
String hex = String.format("%02x", b); // 16 進数 2 桁として表示 (1byte は 00 ~ ff)
sb.append(hex);
}
String result = sb.toString();
if (result.length() > 32) {
result = result.substring(0, 32);
}
return result;
}
/**
* ランダムな文字列を生成する。
* 文字列に記号を含めるため、base64でエンコードする。
* パスワードを生成するために使用する。
* @param num 文字数
* @return 生成したパスワード
*/
public static String getRandomPass(int num) {
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[32];
random.nextBytes(bytes);
String encoded = Base64.getEncoder().encodeToString(bytes);
String result = "";
if (num <= 32) {
result = encoded.substring(0, num);
} else {
result = encoded.substring(0, 32);
}
return result;
}
/**
* 数値を指定の桁で0埋めする
* @param num 処理対象数値
* @param digit 桁数
* @return 0埋め後文字列
*/
public static String padZero(int num, int digit) {
return String.format("%0" + digit +"d", num);
}
/**
* 指定の桁までスペース埋めする
* @param str 処理対象文字列
* @param digit 桁数
* @return スペース埋め後文字列
*/
public static String padSpace(String str, int digit) {
return String.format("%" + digit +"s", str);
}
/**
* 数字の頭の0を除去する
* @param str 処理対象文字列
* @return 0除去後文字列
*/
public static String ltrimZero(String str) {
return str.replaceFirst("^0+", "");
}
/**
* 文字列の頭のスペースを除去する
* @param str 処理対象文字列
* @return スペース除去後文字列
*/
public static String ltrim(String str) {
return str.replaceFirst("^ +", "");
}
/**
* 文字列の後ろのスペースを除去する
* @param str 処理対象文字列
* @return スペース除去後文字列
*/
public static String rtrim(String str) {
return str.replaceFirst(" +$", "");
}
/**
* JSON文字列からMapを生成
* @param json JSON文字列
* @return Map
*/
public static Map<String, String> createMapFromJson(String json) {
Gson gson = new Gson();
Type listType = new TypeToken<HashMap<String, String>>() { }. getType();
HashMap<String, String> map = gson.fromJson(json, listType);
return map;
}
/**
* MapからJSON文字列を生成
* @param map Map
* @return JSON文字列
*/
public static String createJsonFromMap(Map<String, String> map) {
Gson gson = new Gson();
return gson.toJson(map);
}
/**
* パラメータ1がnullの場合はパラメータ2を返す(SQLのNVLと同じ)
* @param val1 検査対象文字列
* @param val2 パラメータ1がnullの時に返す文字列
* @return 判定後パラメータ1OR2
*/
public static String nvl(String val1, String val2) {
if (val1 == null) {
return val2;
} else {
return val1;
}
}
}
public class DateUtil {
/**
* システム日付を返す
* @return システム日付
*/
public static java.util.Date getToday() {
return new java.util.Date(System.currentTimeMillis());
}
/**
* システム日付を返す(SQL)
* @return システム日付
*/
public static java.sql.Date getTodaySql() {
return new java.sql.Date(System.currentTimeMillis());
}
/**
* パラメータのDateに日数を加算
* @param date 対象日付
* @param add_days 加算日数
* @return 計算後の日付
*/
public static java.util.Date addDay(java.util.Date date, int add_days) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, add_days);
return new java.util.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateに日数を加算(SQL)
* @param date 対象日付
* @param add_days 加算日数
* @return 計算後の日付
*/
public static java.sql.Date addDaySql(java.sql.Date date, int add_days) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, add_days);
return new java.sql.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateに月を加算
* @param date 対象日付
* @param add_months 加算月数
* @return 計算後の日付
*/
public static java.util.Date addMonth(java.util.Date date, int add_months) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, add_months);
return new java.util.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateに月を加算(SQL)
* @param date 対象日付
* @param add_months 加算月数
* @return 計算後の日付
*/
public static java.sql.Date addMonthSql(java.sql.Date date, int add_months) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, add_months);
return new java.sql.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateに年を加算
* @param date 対象日付
* @param add_months 加算年数
* @return 計算後の日付
*/
public static java.util.Date addYear(java.util.Date date, int add_years) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, add_years);
return new java.util.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateに年を加算(SQL)
* @param date 対象日付
* @param add_months 加算年数
* @return 計算後の日付
*/
public static java.sql.Date addYearSql(java.sql.Date date, int add_years) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, add_years);
return new java.sql.Date(cal.getTimeInMillis());
}
/**
* パラメータのDateをYYYY/MM/DDのフォーマットにして返す
* @param date 対象日付
* @return 変換後の日付文字列
*/
public static String formateYyyyMmDd(java.util.Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
return sdf.format(date);
}
/**
* パラメータのDateをYYYY/MM/DDのフォーマットにして返す(SQL)
* @param date 対象日付
* @return 変換後の日付文字列
*/
public static String formateYyyyMmDdSql(java.sql.Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
return sdf.format(date);
}
/**
* パラメータのDateをYYYY/MMのフォーマットにして返す
* @param date 対象日付
* @return 変換後の日付文字列
*/
public static String formateYyyyMm(java.util.Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM");
return sdf.format(date);
}
/**
* パラメータのDateをYYYY/MMのフォーマットにして返す(SQL)
* @param date 対象日付
* @return 変換後の日付文字列
*/
public static String formateYyyyMmSql(java.sql.Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM");
return sdf.format(date);
}
/**
* システム日時をYYYYMMDDHHMMのフォーマットにして返す
* @return 変換後の日時文字列
*/
public static String getTodayYyyyMmDdHhMm() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
return sdf.format(ts);
}
/**
* システム日付をyyyy-MM-dd HH:mm:ssのフォーマットにして返す
* @return 変換後の日付文字列
*/
public static String getTodayYyyyMmDdHhMmSs() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
return sdf.format(ts);
}
/**
* システム日付をYYYYMMDDのフォーマットにして返す
* @return 変換後の日付文字列
*/
public static String getTodayYyyyMmDd() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
return sdf.format(ts);
}
/**
* システム日付をYYYY/MM/DDのフォーマットにして返す
* @return 変換後の日付文字列
*/
public static String getTodayYyyyMmDdWithSlash() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
return sdf.format(ts);
}
/**
* YYYY-MM-DD(もしくはYYYY/MM/DD)形式の文字列をDateにして返す(java.util.Date 版)
* @param str_date
* @return
*/
public static java.util.Date convertStringToDate(String str_date) {
// YYYY/MM/DD形式の場合はフォーマットを変更してから処理
if (str_date.indexOf("/") > -1) {
str_date = str_date.replaceAll("/", "-");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date result = null;
try {
result = sdf.parse(str_date);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* YYYY-MM-DD(もしくはYYYY/MM/DD)形式の文字列をDateにして返す(SQL)
* @param str_date
* @return
*/
public static java.sql.Date convertStringToDateSql(String str_date) {
// YYYY/MM/DD形式の場合はフォーマットを変更してから処理
if (str_date.indexOf("/") > -1) {
str_date = str_date.replaceAll("/", "-");
}
return java.sql.Date.valueOf(str_date);
}
}
function createDateList() {
const START_ROW = 6;
const END_ROW=36;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 日本の祝日取得
var cal = CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
var startTime = new Date(2012, 0, 1);
var endTime = new Date(2020, 11, 31);
var events = cal.getEvents(startTime, endTime);
// 標準時間を取得
var nstart = sheet.getRange("H2").getValue();
var nend = sheet.getRange("I2").getValue();
var nrest = sheet.getRange("J2").getValue();
// 色をクリア
sheet.getRange("A" + START_ROW + ":N" + END_ROW).setBackgroundRGB(255, 255, 255);
// 時間・作業内容クリア
sheet.getRange("C" + START_ROW + ":E" + END_ROW).setValue("");
sheet.getRange("G" + START_ROW + ":I" + END_ROW).setValue("");
sheet.getRange("K" + START_ROW + ":L" + END_ROW).setValue("");
sheet.getRange("N" + START_ROW + ":N" + END_ROW).setValue("");
var yesterday;
for (i = START_ROW; i < END_ROW + 1; i++) {
var today = sheet.getRange("A" + i).getValue();
var weekday = sheet.getRange("B" + i).getValue();
// 不要な日を消す
if (i > 30) {
valY = yesterday.toString().slice(8, 10);
valT = today.toString().slice(8, 10);
if (valT != "" && valY > valT) {
sheet.getRange("A" + i + ":I" + i).setValue("");
continue;
}
}
if (weekday == "日") {
sheet.getRange("A" + i + ":N" + i).setBackgroundRGB(255, 230, 230);
} else if (weekday == "土") {
sheet.getRange("A" + i + ":N" + i).setBackgroundRGB(200, 230, 255);
} else {
sheet.getRange("C" + i).setValue(nstart);
sheet.getRange("D" + i).setValue(nend);
sheet.getRange("E" + i).setValue(nrest);
}
// 祝日
for (j = 0; j < events.length; j++) {
var holiday = events[j].getAllDayStartDate().toString();
if (today == holiday) {
sheet.getRange("A" + i + ":N" + i).setBackgroundRGB(255, 230, 230);
sheet.getRange("N" + i).setValue(events[j].getTitle());
sheet.getRange("C" + i).setValue("");
sheet.getRange("D" + i).setValue("");
sheet.getRange("E" + i).setValue("");
sheet.getRange("G" + i).setValue("");
sheet.getRange("H" + i).setValue("");
sheet.getRange("I" + i).setValue("");
sheet.getRange("K" + i).setValue("");
sheet.getRange("L" + i).setValue("");
}
}
yesterday = today;
}
}
fun main(args: Array<String>) { // ←JVM言語ですが、このように一番外枠がClassでなくても大丈夫。Ptyhonのモジュールのような考え方です。
// Javaと相互互換を保証しています。ので、Javaの資産がそのまま使えます。またこのファイルのメソッドなどもJavaから呼び出せます。
println(java.sql.Timestamp.valueOf("2013-10-11 12:13:4"))
System.out.println("Javaによるsysout")
// (アドレスが)変更できない変数の宣言は「val」(Javaで言う所のfinal)
val str: String = "Hello, World!"
val num: Int = 5 // プリミティブはない。IntとかLongとか。Javaでいうラッパーを使用する。ここらへんもPythonに近いですね。
// 3項演算子の代わりにこんな文法がある
val res = if (num.equals(5)) {
"Hi, Tom!"
} else {
"Hi, Bob!"
}
println(str + num.toString())
println(res)
// (アドレスが)変更できる変数の宣言は「var」。Kotlinでは可能な限り「val」を使うことを推奨
var str2: String = "test"
str2 = "test2"
println("str2:" + str2)
val str3: String = "test"
// str3 = "test3" ←これはコンパイルエラー。リテラルはアドレスが別になるため。
// str3 = str3 + str2 ←よってこれもコンパイルエラー。StringBuilderのように使う場合はvarを使用する。
str2 += "abcd"
println("文字列の変更。test2 + abcd = " + str2)
// 型の変換は変換元のメソッドで行う
val int1: Int = "123".toInt()
val int2 = int1 * 10
println(int2.toString())
//Int.parseInt("123") ←こんなメソッドはない
// Switchはなくて、whenを使う
val color: String = "青"
val piyo = when (color) {
"青" -> "blue"
"赤" -> "red"
else -> "other"
}
println(piyo)
// (中身を)変更できないリスト。Pythonで言う所のタプル。
// (豆知識)Pythonでも可能な限りリストではなくタプルを推奨してますよね。
println("変更できないリスト")
val list: List<String> = listOf("1", "2", "5")
// list.add("5") ←変更できないリストなのでaddメソッドは存在しない
for (value1 in list) {
println(value1)
}
// (中身を)変更できるリスト。Pythonで言う所のリスト
println("変更できるリスト。宣言は「val」なところに注目。この場合はアドレスが変わらないという意味")
// JavaでfinalのListにもaddはできますよね
val mutableList: MutableList<Int> = mutableListOf(9, 8, 7, 6, 5)
mutableList.add(4)
for (value1 in mutableList) {
println(value1)
}
// JavaのObjectにあたるクラスはAnyです
val any1: Any = "This is Any."
val any2: Any = 123 // Javaと違ってプリミティブがないのでこんな書き方になる。Javaなら「Object any2 = new Integer(123);」とか。
println(any1.toString())
println(any2.toString())
// クラスの使い方。Kotlinでは「new」は不要
val carol = Car(price = 1000000, speed = 250, name = "キャロル")
println("name:" + carol.name) // ←実はこれはフィールド(値)を直接参照しているのではなく、プロパティ(getter)の呼び出しです
// メソッド呼び出し
carol.displayInfo()
// Try-Catch
try {
throw Exception("try-catch")
} catch (e: Exception) {
println("Error Message:" + e.message)
}
// ラムダ
val sum: (Int, Int) -> Int = { x, y -> x + y }
println("ラムダの処理結果→" + sum(1, 2))
// 匿名関数
val sum2 = fun(a: Int, b: Int): Int {
return a + b
}
println("匿名関数の処理結果→" + sum2(1, 2))
// 2つの結果を戻してくれる関数。Javaに欲しかったですよね。
val pair = carol.addNumbers(2, 3)
println("2つの結果を返してくれる関数 ひとつめ→" + pair.first + " ふたつめ→" + pair.second)
// プライマリコンストラクタの動き
val cb400sf = Bike("CB400SF", 200, 800000)
println("プライマリコンストラクタで設定されたもの→" + cb400sf.name + "," + cb400sf.maxSpeed + ",\\" + cb400sf.price)
// filterの使い方。trueの要素だけ返す
val filterSample = arrayOf(1, 2, 3).filter { num -> num != 2 }
print("filterの使い方→")
for (x in filterSample) {
print(x.toString() + " ")
}
println()
// filterNotにすると逆になる
val filterNotSample = arrayOf(1, 2, 3).filterNot { num -> num != 2 }
print("filterNotの使い方→")
for (x in filterNotSample) {
print(x.toString() + " ")
}
println()
// forEach
println("ListのforEachはJava8と同じ雰囲気で。")
listOf(1, 2, 3).forEach { x -> println(x + 1) }
// リスト系は他にもMaxとかMinとかDistinctとか便利なのがたくさんある。リファレンスは見たほうがいいです。
// Stringの便利な機能やメソッド
println("Stringの便利な機能やメソッド")
val a = 2
val b = 3
// もうformatメソッドは必要ありません
println("$a + $b = ${a + b}") // 2 + 3 = 5
// ヒアドキュメントも使えます
val hereDoc = """
<html>
<body>
$a + $b = ${a + b}
</body>
</html>
"""
println(hereDoc)
// Kotlinはnull safetyです。
// 基本的にNull Pointer Exceptionは発生しません。(Javaで定義したメソッドの使い方によってはそれでも起こるけど)
// 普通の変数にnullを代入しようとするとコンパイルエラーになります
// val nullDesu: String = null ←コンパイルエラー
// nullが入り得る場合は明示的に下記のようにしなければいけません
val nullDesu: String? = null
// println(nullDesu.length) ←わざとぬるぽ起こそうとしてもコンパイルエラー。nullが入り得る変数で危険なことはできない仕様です
if (nullDesu != null) {
println(nullDesu.length) // nullチェックをするとコンパイルが通ります
}
// 既存のクラスに機能を追加できる「Extension」という機能
// 今回はStringクラスに機能追加しちゃいます
fun String.addShimasu(x: Int): String {
return this + x.toString()
}
println("これがExtensionです!!!".addShimasu(123456))
}
// クラスの書き方(Javaっぽく)
// ちなみにデフォルトだとclassはpublic finalです。
// また、staticの概念はないです
class Car {
// getterやsetterは記載不要です。
// 変数名がgetter、setterとして外部と連携します。
// 直接に値(フィールド)にアクセスするのではないので、これらは「フィールド」ではなく「プロパティ」と呼びます。
// 要はJavaで言う所のメンバ変数をprivateで宣言してgetter, setterを用意した状態と同じで、メンバ変数名でgetter, setterが使用できるということです。
val price: Int
val speed: Int
val name: String
constructor(price: Int, speed: Int, name: String) {
this.price = price
this.speed = speed
this.name = name
}
// 何も返さない時はvoidではなくUnit型
fun displayInfo(): Unit {
println("クラスのメソッド呼び出し↓")
println("Name:" + this.name)
println("MaxSpeed:" + this.speed)
println("Price:" + this.price)
return
}
// 複数の値を返せる関数
fun addNumbers(a: Int, b: Int): Pair<Int, Int> {
return Pair(a + 1, b + 1)
}
}
// クラスのプライマリコンストラクタの書き方(Kotlinっぽい)
class Bike(name: String, maxSpeed: Int, price: Int) {
val name = name
val maxSpeed = maxSpeed
val price = price
}