2017년 12월 10일 일요일

JavaScriptにおけるvar/let/constの使い分け

JavaScriptにおけるvar/let/constの使い分け

2016年7月14日 by 古都こと
JavaScriptの3つある変数宣言、varとletとconstは、よく混乱を生みます。
どれも変数を宣言することに変わりはないので、違いがわかりにくいのです。
このことが初学者を混乱させている場面をたびたび目にしますし、プログラミングに慣れ親しんだ人でも役割を意識しないまま書いていることがあります。

そこでこの記事では、3つの変数宣言の役割とその使い分けについて、それぞれ簡単に紹介してみます。

Contents
1 3種類の変数宣言とその使い分け
1.1 var – 変数を宣言する
1.2 let – 変数を宣言する(ブロックスコープ)
1.3 const – 再代入不可能な変数を宣言する
1.4 つまり…
2 let vs. const
2.1 再代入はほとんど必要ない
2.2 基本的にはconstを使用する
2.3 再代入が必要になる(letを使用する)場面
3 まとめ
3種類の変数宣言とその使い分け

var – 変数を宣言する

varは、JavaScriptにおいて変数を宣言する上で、最も基本的な方法になります。
varで宣言された変数は関数スコープとなり、宣言のスコープ先頭への巻き上げ(Hoisting)が行われます。
(※変数のスコープおよび巻き上げについてはここでは解説しません。)

var x = 10;
x = 20;
もともと、JavaScriptの変数宣言にはvarしかありませんでした。
変数を宣言する唯一の方法だったのです。letとconstは新参者ということになります。
よって古いブラウザでも何の問題なく動くのがこのvarになります。

しかし、現在ではvarを使う理由はありません。関数スコープおよび巻き上げのせいで、
挙動の予測が困難になるからです。varを使うのは、古いブラウザを対象にした場合のみになります。
モダンブラウザを対象にする場合は、varの代わりにletを使用してください。

let – 変数を宣言する(ブロックスコープ)

letは比較的新しい変数宣言の方法です。varと同じく変数を宣言できますが、
letで宣言した変数はブロックスコープになります。巻き上げは行われますが、宣言前に参照するとエラーとなります。

let x = 10;
x = 20;
つまり、letは他のプログラミング言語における変数宣言とほぼ同じ動きをします。
プログラマにとって直感的で、扱いやすい挙動をするということです。
初学者にとっても、letは不思議な挙動をしないので、わかりやすいはずです。

letの用途は、varの代わりです。varでも変数は宣言できますが、letのほうが、
よりわかりやすい動きをします。モダンブラウザを対象にしたコードでは、かつてvarを使っていた場面全てで
letを使うことを推奨します。極めて特殊な処理をしていないかぎり、varをletに置き換えても問題は出ないはずです。

const – 再代入不可能な変数を宣言する

constはletと同時期に提案された変数宣言の方法です。letと同じくブロックスコープで、
巻き上げは行われるが宣言前の参照がエラーになる点も同じです。ただし、
constで宣言された変数は、再代入が不可能になります。

const x = 10;
x = 20; // 再代入はerror
注意したい点としては、他のプログラミング言語ではconstというキーワードはコンパイル時定数になることがほとんどですが、
JavaScriptでは単に再代入不可になるだけということです。つまり、JavaScriptにおけるconstは、
他のプログラミング言語におけるfinalと同じ動きをします。

constは、ほぼletと同じです。letとの違いは再代入が可能か否かだけです。constを使うのは変数への再代入が不要な場合、
あるいは再代入されたくない場合になります。

つまり…

つまり、JavaScriptにおいて、実際に変数の宣言に使用するのは、
letとconstだけということになります。varのことは忘れてしまってかまいません。
再代入が必要な場合はlet、不必要な場合はconstを使用すればいいのです。

let vs. const

さて、varは脱落しました。残る問題はletとconstの使い分けです。
再代入が必要か不必要か、どうやって見分けるのでしょうか。
それぞれどんな場面で使用することになるのでしょうか。

再代入はほとんど必要ない

実は、実際のプログラミングにおいて、再代入というのはほとんど必要ないのです。
あなたが今まで書いたプログラムを思い浮かべてください。変数を書き換える場面というのは、めったになかったはずです。

多くの変数は、一度値が代入されると、その値のまま生涯を終えます。
簡単なプログラムを想像してみましょう。円の面積を求めるプログラムです。

const pi = 3.14;
const radius = 5;
const area = pi * radius * radius;
const message = `半径${radius}の円の面積は約${area}です。`;

console.log(message);
このプログラムに再代入は一切出てきません。それもそのはずです。
まず、意味が異なる値には、それぞれ違う名前が割り当てられます。
そして計算して値が変われば、意味も変わり、別の名前が割り当てられます。
つまり、違う値が同じ名前に割り当てられることは、普通ありません。再代入は発生しないのです。

基本的にはconstを使用する

再代入が発生しない場面でletを使うのは得策ではありません。不必要な変数の再代入を許せば、
バグの発生に繋がることがあります。また、コードの読み手に「この変数は値が変わる可能性があるのか?
値の変化を追いかける必要がありそうだ」と不要な懸念を抱かせることになり、デバッグの手間も増えます。

以上のことから、変数の宣言には、基本的にはconstを使うことを推奨します。
constを使うことで、値が変化しないという保証をすることができるのです。

再代入が必要になる(letを使用する)場面

逆に再代入が必要になるのは、どんな場面なのでしょうか。再代入は、
主にイテレーション(繰り返し)処理が行われる場面で必要とされます。
代表的な例としてはfor文があります。for文ではイテレータ変数(多くの場合iという名前が使用される)の値を増減させ、
イテレーションを行います。このときに再代入が必要になります。

for(let i = 0; i < 100; i++) {
  console.log(i);
}
ループ中にiの値が何度も書き換わっています。こういったときはletが必要になります。

ただしforループ内の変数宣言については、基本通りconstを使うべきです。

for(let i = 0; i < 100; i++) {
  const value = i * 2;
  console.log(value);
}
まとめ

varは使わず、letとconstだけを使う。
ほとんどの変数は再代入の必要が無いので、基本的にはconstを使う。
どうしても再代入が必要なときだけletを使う。

2017년 12월 9일 토요일

javascript memo list1

https://www.javatpoint.com/javascript-form-validation#email


<script>
  document.getElementById("demo").innerHTML = "My First JavaScript";
</script>

<script type="text/javascript">
  document.write("JavaScript is a simple language for javatpoint learners");
</script>

for (i=1; i<=5; i++)
{
  document.write(i + "<br/>")
}

var i=11;
while (i<=15)
{
  document.write(i + "<br/>");
  i++;
}

var i=21;
do{
   document.write(i + "<br/>");
   i++;
}while (i<=25);

var a=20;
if(a==10){
  document.write("a is equal to 10");
}
else if(a==15){
  document.write("a is equal to 15");
}
else if(a==20){
  document.write("a is equal to 20");
}
else{
  document.write("a is not equal to 10, 15 or 20");
}

var s1="javascript ";
var s2="concat example";
var s3=s1.concat(s2);
document.write(s3);

var s1="     javascript trim    ";
var s2=s1.trim();
document.write(s2);

var s1="abcdefgh";
var s2=s1.slice(2,5);
document.write(s2);

var s1="JavaScript toUpperCase Example";
var s2=s1.toUpperCase();
document.write(s2);

var s1="JavaScript toLowerCase Example";
var s2=s1.toLowerCase();
document.write(s2);

var s1="javascript from javatpoint indexof";
var n=s1.lastIndexOf("java");
document.write(n);

var s1="javascript from javatpoint indexof";
var n=s1.indexOf("from");
document.write(n);

var str="javascript";
document.write(str.charAt(2));

var stringname=new String("hello javascript string");
document.write(stringname);

object={property1:value1,property2:value2.....propertyN:valueN}
emp={id:102,name:"Shyam Kumar",salary:40000}
document.write(emp.id+" "+emp.name+" "+emp.salary);

var emp=new Object();
emp.id=101;
emp.name="Ravi Malik";
emp.salary=50000;
document.write(emp.id+" "+emp.name+" "+emp.salary);

function emp(id,name,salary){
  this.id=id;
  this.name=name;
  this.salary=salary;
}
e=new emp(103,"Vimal Jaiswal",30000);
 
document.write(e.id+" "+e.name+" "+e.salary);

function emp(id,name,salary){
  this.id=id;
  this.name=name;
  this.salary=salary;
 
  this.changeSalary=changeSalary;
   
  function changeSalary(otherSalary){
    this.salary=otherSalary;
  }
}
e=new emp(103,"Sonoo Jaiswal",30000);
document.write(e.id+" "+e.name+" "+e.salary);
e.changeSalary(45000);
document.write("<br>"+e.id+" "+e.name+" "+e.salary);

var emp=["Sonoo","Vimal","Ratan"];
for (i=0;i<emp.length;i++){
   document.write(emp[i] + "<br/>");
}

var i;
var emp = new Array();
emp[0] = "Arun";
emp[1] = "Varun";
emp[2] = "John";
 
for (i=0;i<emp.length;i++){
  document.write(emp[i] + "<br>");
}

var emp=new Array("Jai","Vijay","Smith");
for (i=0;i<emp.length;i++){
  document.write(emp[i] + "<br>");
}

Current Date and Time: <span id="txt"></span>
var today=new Date();
document.getElementById('txt').innerHTML=today;
Current Date and Time: Sun Dec 10 2017 09:59:52 GMT+0900 (JST)

var date=new Date();
var day=date.getDate();
var month=date.getMonth()+1;
var year=date.getFullYear();
document.write("<br>Date is: "+day+"/"+month+"/"+year);
Date is: 10/12/2017


Current Time: <span id="txt"></span>
<script>
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
document.getElementById('txt').innerHTML=h+":"+m+":"+s;
</script>
Current Time: 9:59:52

Events Description
onclick occurs when element is clicked.
ondblclick occurs when element is double-clicked.
onfocus occurs when an element gets focus such as button, input, textarea etc.
onblur occurs when form looses the focus from an element.
onsubmit occurs when form is submitted.
onmouseover occurs when mouse is moved over an element.
onmouseout occurs when mouse is moved out from an element (after moved over).
onmousedown occurs when mouse button is pressed over an element.
onmouseup occurs when mouse is released from an element (after mouse is pressed).
onload occurs when document, object or frameset is loaded.
onunload occurs when body or frameset is unloaded.
onscroll occurs when document is scrolled.
onresized occurs when document is resized.
onreset occurs when form is reset.
onkeydown occurs when key is being pressed.
onkeypress occurs when user presses the key.
onkeyup occurs when key is released.


Method Description
alert() displays the alert box containing message with ok button.
confirm() displays the confirm dialog box containing message with ok and cancel
button.
prompt() displays a dialog box to get input from the user.
open() opens the new window.
close() closes the current window.
setTimeout() performs action after specified time like calling function, evaluating
  expressions etc.

var n=new Number(value);
var x=102;//integer value
var y=102.7;//floating point value
var z=13e4;//exponent value, output: 130000
var n=new Number(16);//integer value by number object

Constant Description
MIN_VALUE returns the largest minimum value.
MAX_VALUE returns the largest maximum value.
POSITIVE_INFINITY returns positive infinity, overflow value.
NEGATIVE_INFINITY returns negative infinity, overflow value.
NaN represents "Not a Number" value.

JavaScript Number Methods

Let's see the list of JavaScript number methods with description.

Methods Description
toExponential(x) displays exponential value.
toFixed(x) limits the number of digits after decimal value.
toPrecision(x) formats the number with given number of digits.
toString() converts number into string.
valueOf() coverts other type of value into number.


document.writeln("<br/>screen.width: "+screen.width);
document.writeln("<br/>screen.height: "+screen.height);
document.writeln("<br/>screen.availWidth: "+screen.availWidth);
document.writeln("<br/>screen.availHeight: "+screen.availHeight);
document.writeln("<br/>screen.colorDepth: "+screen.colorDepth);
document.writeln("<br/>screen.pixelDepth: "+screen.pixelDepth);

var number=document.getElementById("number").value;
var allgenders=document.getElementsByName("gender");
var totalpara=document.getElementsByTagName("p");

function showcommentform() {
var data="Name:<input type='text' name='name'><br>Comment:<br><textarea rows='5' cols='80'></textarea>
<br><input type='submit' value='Post Comment'>";
document.getElementById('mylocation').innerHTML=data;
}


[MyBatis] parameterType HashMap 관련 예시(다중파라미터)

[MyBatis] parameterType HashMap 관련 예시(다중파라미터)
1. 기존 parameterType="String" 파라미터 한개로 처리

UserInfoMapper.java
public interface UserInfoMapper {
    public UserInfo getUserInfo(String userId);
}

UserInfoMapper.xml
<select id="getUserInfo" parametertype="String" resultmap="UserInfoResultMap">

SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
</select>

UserInfoService.java
String userId = "user_id_value";
userInfo = userInfoMapper.getUserInfo(userId);
※ 단일 parameterType 로 String userId값 넣음

2.  parameterType HashMap을 이용해서 여러개 넣기

UserInfoMapper.java
public interface UserInfoMapper {
    public UserInfo getUserInfo(HashMap<String, Object> map);
}

UserInfoMapper.xml
<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
AND
    state = #{state}
</select>
UserInfoService.java
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("userId", "user_id_value");
map.put("state", "state_value");
userInfo = userInfoMapper.getUserInfo(map);

3. 2번과 비슷하지만 기존 userInfo 도메인 이용

UserInfoMapper.java
public interface UserInfoMapper {
    public UserInfo getUserInfo(HashMap<String, Object> map);
}
UserInfoMapper.xml
<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">

SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{user.userId}
AND
    state = #{user.state}
</select>

UserInfoService.java
UserInfo userInfo = new UserInfo();
userInfo.setUserId("user_id_value");
userInfo.setState("state_value");

HashMap<String, Object> map = new HashMap<String, Object>();
map.put("user", userInfo);
userInfo = userInfoMapper.getUserInfo(map);

4. Param 이용

UserInfoMapper.java
public interface UserInfoMapper {
    public UserInfo getUserInfo(@Param("userId") String userId, @Param("state") int state);
}

UserInfoMapper.xml
<select id="getUserInfo" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
AND
    state = #{state}
</select>
UserInfoService.java
String userid ="user_id_value";
int state = 0;
userInfo = userInfoMapper.getUserInfo(String userid,int state);

json sample1

@RequestMapping(value = "ok", method = RequestMethod.POST)
public String ok(@Validated TestForm form)
{
System.out.print("");
String tttt = form.getTestList();

String a = tttt;
String saaaa = a.substring(1, a.length()-1 );

JSONParser jsonParser = new JSONParser();
         JSONObject jsonObj;
try {
jsonObj = (JSONObject) jsonParser.parse(saaaa);
JSONObject jsonObject = (JSONObject) jsonObj;

   for (Object key : jsonObject.keySet()) {
   String keyString = key.toString();
 

JSONArray memberArray = (JSONArray) jsonObject.get(keyString);

for(int i=0 ; i<memberArray.size() ; i++){
System.out.print("");
                JSONObject tempObj = (JSONObject) memberArray.get(i);
               
                JSONArray memberArray2 = (JSONArray) tempObj.get("workYearMonthListTable");
                for(int j=0; j<memberArray2.size(); j++)
                {
                JSONObject aaaa = (JSONObject) memberArray2.get(j);
                String temp1 = aaaa.get("name").toString();
                String temp2 = aaaa.get("id").toString();
                }
               
                JSONArray memberArray3 = (JSONArray) tempObj.get("machinListTable");
                for(int j=0; j<memberArray3.size(); j++)
                {
                JSONObject aaaa = (JSONObject) memberArray3.get(j);
                String temp1 = aaaa.get("name").toString();
                String temp2 = aaaa.get("id").toString();
                }
               
            }

    }


} catch (org.json.simple.parser.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       


return "next";
}



       
var bigTotal = [];        
var total = [];
// 리스트 생성
        //var testList = new Array();
var testList = []

for (var i=0; i < 5; i++)
{
//var employees  = [];
//employees["id"] = "100";
//employees["name"] = "Yashwant" + i;
//employees["age"] = "30";
  //employees.push({id:100, name:'Yashwant' + i, age:30});
var data = new Object();
data.id = i ;
            data.name = "Tester #" + i ;
           
            testList.push(data);
           
  //all.push(employees);
}

//var jsonEncode = JSON.stringify(testList);

var data2 = new Object();
data2.workYearMonthListTable = testList;
data2.machinListTable = testList;

total.push(data2);

//total.push({workYearMonthListTable: testList});
//total.push({machinListTable: testList});

var keyValue1 = 'site1';
var keyValue2 = 'site2';
//bigTotal[keyValue] = total;

var obj = {};

obj[keyValue1] = total;
obj[keyValue2] = total;

bigTotal.push(obj);

/*
var keyname = 'key';
var something = { };
something[keyname] = 'value';
*/

var jsonEncode = JSON.stringify(bigTotal);
alert(jsonEncode);

        var input = $("<input>").attr("type", "hidden").attr("name", "tableList").val(JSON.stringify(gridData));
        var input2 = $("<input>").attr("type", "hidden").attr("name", "testList").val(JSON.stringify(bigTotal));
  /*
        var inputObj = "";
        inputObj = document.createElement("input");
        $(inputObj).attr("type","hidden");
        $(inputObj).attr('name','tableList');
        $(inputObj).attr("value",JSON.stringify(tableList));
*/
        //$('#TestForm').append($(inputObj));
$('#dynamic_form').append($(input));
$('#dynamic_form2').append($(input2));
        //document.body.appendChild($('#TestForm'));
$("#TestForm").submit();

2017년 12월 4일 월요일

jstl을 이용한 javascript에서 el값 받기 JSP / JAVA

jstl을 이용한 javascript에서 el값 받기   JSP / JAVA  
2013. 7. 19. 14:22
복사http://blog.naver.com/typeofb/191469973

// java
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put("name", "홍길동");
map.put("city", "서울");
map.put("age", 30);
 
ArrayList<Object> list = new ArrayList<Object>();
list.add("hong@naver.com");
list.add("gil@daum.net");
list.add("dong@nate.com");
 
ArrayList<HashMap<Object, Object>> arrayListMap = new ArrayList<HashMap<Object, Object>>();
arrayListMap.add(map);
 
HashMap<Object, ArrayList<Object>> lMultiData = new HashMap<Object, ArrayList<Object>>();
lMultiData.put("email", list);
 
mav.addObject("list_map", arrayListMap);
mav.addObject("map_list", lMultiData);
 
 
// javascript
var list1 = new Array();
<c:forEach items="${list_map}" var="item1">
list1.push("${item1.name}");
list1.push("${item1.city}");
list1.push("${item1.age}");
</c:forEach>
for (var i = 0; i < list1.length; i++) {
    alert(list1[i]);
}
alert("${list_map[0].name}");
 
var list2 = new Array();
<c:forEach items="${map_list.email}" var="item2">
list2.push("${item2}");
</c:forEach>
for (var i = 0; i < list2.length; i++) {
    alert(list2[i]);
}

json만들기

var obj = "${topData}"
alert(obj);
//var objParse = JSON.parse(obj);

alert(obj.top1);

var jsonMap  = $.stringify(obj);

$.each( jsonMap, function( key, value ) {
  alert( key + ": " + value );
});

/*
var empMap = '${topData}';
//here is the example value of map in javascript which i see while debugging
//var empMap = {emp1_100=[com.Employee@5b7b4bc5], emp2...

for (var key in empMap) {
    alert(key + ': ' + empMap[key]);
}*/

        ArrayList<HashMap<String, String>> targetList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> targetDataMap = new HashMap<String, String>();
        targetDataMap.put("id", "1");
        targetDataMap.put("name", "kim seungpil");
        targetDataMap.put("age", "38");
        targetList.add(targetDataMap);
       
        HashMap<String, ArrayList<HashMap<String, String>>> middleDataMap =
        new HashMap<String, ArrayList<HashMap<String, String>>>();
        middleDataMap.put("test1", targetList);
       
        HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> topDataMap =
        new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();
       
        topDataMap.put("top1", middleDataMap);
        topDataMap.put("top2", middleDataMap);
       
        //langSel.add("\"en\"", true);
       
model.addAttribute("topData", topDataMap);

Convert Java Map to Javascript Map

https://stackoverflow.com/questions/13840660/convert-java-map-to-javascript-map

 <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20070829</version>
  </dependency>

Convert Java Map to Javascript Map


Map<String, String> langSel = new HashMap<String, String>();
langSel.add("en", true);
langSel.add("de", false);
langSel.add("fr", false);

JSONObject jsonObj = new JSONObject(langSel);
engine.put("langSel", jsonObj.toString());

var model=[];
  model.paramOne="${model.paramOne}";
  model.paramTwo="${model.paramTwo}";
  model.paramThree="${model.paramThree}";


{top1={test1=[{name=kim seungpil, id=1, age=38}]}, top2={test1=[{name=kim seungpil, id=1, age=38}]}}

Map<String, String> langSel = new HashMap<String, String>();
langSel.add("en", true);
langSel.add("de", false);
langSel.add("fr", false);

JSONObject jsonObj = new JSONObject(langSel);
engine.put("langSel", jsonObj.toString());

var color = {}; // unique object instance
var shape = {}; // unique object instance
var map = new HashMap();
map.put(color, "blue");
map.put(shape, "round");
console.log("Item is", map.get(color), "and", map.get(shape));
</script>


자바스크립트에서 당장 사용해야 할 5가지의 배열 메소드들 (Array)
2015년 3월 4일 글쓴이 KAZIKAI·댓글 9개
배열 메소드 들중에.. 평소에 잘 사용하지 않지만, 사용하면 생산성이 많이 올라가는 메소드 들이다.

하지만 다시 리마인드 하는 의미로 정리하면, 도움이 될것 같다. 익숙한놈도 있고.. 초기에 JS 공부할때 알아뒀지만, 한번도 안써봤던,,(reduce) 같은 놈들은 다시 보니 어색 하기도 하고. 이번기회에 정리를 해보자

아래는 이 포스팅의 원문이 되는 블로그

http://colintoh.com/blog/5-array-methods-that-you-should-use-today?utm_source=javascriptweekly&utm_medium=email



1. 배열에서특정값이 있는지 찾을때는 indexOf를 사용해라

대부분의 배열에서 indexOf 를 사용 하지 않으면, for loop 를 돌려서 찾을수 밖에 없다. 즉 아래와 같은 코드를 사용 하게 되는데.

var isExist =false;
for( var i = 0; max = array.length; i += 1 ) {
 if( array[i] === "특정값" ){
   isExist = true;
 }
}
위와 같은 코드는 아래와 같이 간단하게 사용할 수 있다.

var isExist = (array.indexOf(“특정값”)!== -1 )
즉  간단하게 위의 for loop 를 한줄로 표현할 수 있으며, 이부분이 생산성이나, 코드 가독성에 도 옳은 영향을 끼친다.

2. filter 를사용해보세요:)

이건.. JSON 오브젝트로 이루어진 배열중에 특정 값만 filter 시킬때 유용하다.

var arr = [   
  {"name":"apple", "count": 2},   
  {"name":"orange", "count": 5},   
  {"name":"pear", "count": 3},   
  {"name":"orange", "count": 16}
];   
var newArr = arr.filter(function(item){   
  return item.name === "orange";
}); 
console.log("Filter results:",newArr);
위 값의 newArr 은 name이 orange 인 놈만 필터 되서 나온다.

3. forEach()를쓰세요

사실 개인적으로 for 루프가 더 성능 향상에 좋다고 해서..( 자바스크립트 성능 최적화에 나온다. ).for 로 풀어서 쓰는데  1ms 도 차이 안나니 그냥 forEach를 쓰라고 가이드 한다.

사용법은 아래와 같다.

var array = [1,2,3,4,5];
array.forEach( function( v, i ){
  if( v === 3 ){
    console.log( v + ":" + i); // 3:2 가 나온다.
  }
});
4. map을 잘 활용하자.

이전에 jsperf 에서 map이 forEach 보다 더 성능이 빨라서. 개인적으로 array에서 map을 주로 써왔다. 하지만 … map과 forEach는 용도가 미세하게 다른데.. map은 각 루프에서return을 할수있는 것이 특징이다.

( return된 결과의 동일한 배열을 원하는것이 아니라면 forEach가 더 적합하다. )

즉 map을 사용하면, 리턴값으로 같은 길이의 배열이 나오게 된다.

예를들어 …

var a = [1,2,3,4,5];
var b = a.forEach( function(v, i){ console.log(v); return v+1;}});
var c = a.map( function(v, i){ console.log(v); return v+1;});
를 실행해보면차이점이 다르다.  b는 undefined 가 나오며 c 는 [2,3,4,5,6] 이라는 배열이 나온다.즉 배열을 가지고, 연산을 하고 길이가 같은 배열로 결과를 리턴받고 싶을때는 map을 쓰는것이 훨씬 유리하다.

forEach와는 용도가 서로 다르다는것을 기억하자

마지막으로 5번..

5.reduce!! 를 사용하자

이놈은.. 인자를 어떻게 주냐에 따라 용도가 달라진다.

array.reduce(f,n)
var a= [1,2,3,4,5] //f는 함수 n은 두번째 인자 라고 가정
n이 없을경우 array.reduce(f);를 살펴 보자
f의
(0) iteration
- 첫번째 인자 : 1
- 두번째 인자 : 2
(1) iteration
- 첫번째 인자 : 1,2
- 두번째 인자 : 3
(2) iteration
- 첫번째 인자 : 1,2,3
- 두번째 인자 : 4
(3) iteration
- 첫번째 인자 : 1,2,3,4
- 두번째 인자 : 5
로 나오게 된다.
즉 f 의 인자가 f( a,b,c,d) 라면
a=이전값
b= 현재값
c= 인덱스
d= 배열
로 생각하면 된다.

하지만 reduce 메소드를 불러올때  n을 주게 되면, f의 첫번째 인자가 n이 되게 되는데, 즉 이전초기값이 n으로 대체 된다.

var a= ["a","b","c","d","e","a","b","a","c","c","c"];
var b = a.reduce(function(x,y){
  console.log("x:", x);
  console.log("y:", y);
  x[y] = ++x[y]|| 1;
  return x;
},{});
console.log(b);
위 예제를 돌려보면 B 는 최종적으로

Object {a: 3, b: 2, c: 4, d: 1, e: 1}

로 리턴된다.

설명한 5개의 메소드들은  사용하면 개발 생산성 및 가독성이 좋아질 것 같다.

2017년 12월 3일 일요일

トランプ氏、フリン前補佐官の行動「合法」 「FBIに嘘」は知っていたと

トランプ氏、フリン前補佐官の行動「合法」 「FBIに嘘」は知っていたと
트럼프 플린 전 보좌관의 행동 "합법적" "FBI에 거짓말 '알고 있었다고

12/3(日) 12:18配信
ドナルド・トランプ米大統領の側近で前大統領補佐官(国家安全保障問題担当)のマイケル・フリン被告が連邦捜査局(FBI)に虚偽の供述をしたと有罪を認め、捜査に協力していると明らかにした問題で、トランプ氏は2日、ツイッターで、被告が政権移行期間にロシア大使と接触していたのは「合法」だと書いた。さらに大統領は、被告がFBIに「嘘をついた」ことは前から承知していたと書いた。
도널드 트럼프 미국 대통령의 측근에서 전 대통령 보좌관 (국가 안전 보장 문제 담당)의 마이클 플린 씨가 연방 수사 국 (FBI)에 허위 진술을했다고 유죄를 인정하고 수사에 협력하고 있다고 밝혔다 한 문제에서 트럼프는 2 일 트위터에서 피고가 정권 과도기 러시아 대사와 접촉하고 있던 것은 "합법적"이라고 썼다. 또한 대통령은 피고가 FBI에 "거짓말"것은 전부터 알고 있었다고 썼다.

2日朝はトランプ政権にとって、包括的減税法案が早朝に上院を51対49で通過したことを祝う機会となるはずだった。しかし、それよりもフリン被告の有罪証言と捜査協力が大きく注目されるなか、大統領は「僕がフリン将軍をくびにしなきゃならなかったのは、副大統領とFBIに嘘をついたからだ。彼はその嘘について、有罪を認めた。残念なことだ。というのも、政権移行期の行動は合法だったので。隠すことは何もなかった!」とツイートした。
2 일 아침 트럼프 정권에게 포괄적 인 감세 법안이 이른 아침에 상원을 51 대 49로 통과 한 것을 축하하는 기회가 될 것 같았다. 그러나 그보다 플린 피고의 유죄 증거와 수사 협력이 크게 주목되는 가운데, 대통령은 "내가 플린 장군을 해고하지 않으면 안 것은 부통령과 FBI에 거짓말을했기 때문이다. 그 그 거짓말에 대해 유죄를 인정했다. 안타까운 일이다. 왜냐하면 정권 이행기의 행동은 합법적이기 때문에. 숨기는 것은 아무것도 없었다! "라고 트윗했다.

https://twitter.com/realDonaldTrump/status/937007006526959618

今年2月のフリン補佐官解任当時、ホワイトハウスは解任理由について、昨年12月に駐米ロシア大使と接触したことについて副大統領に事実と異なる説明をしたからだと説明していた。しかし今回のツイートで大統領は、前補佐官がFBIに嘘をついたことを解任当時すでに承知していたと書いた。
올해 2 월 플린 보좌관 해임 당시 백악관 해임 이유에 대해 지난해 12 월 주미 러시아 대사와 접촉 한 것에 대해 부통령에 사실과 다른 설명을했기 때문이라고 설명했다. 그러나 이번 트윗 대통령은 전 보좌관이 FBI에 거짓말을 해임 당시 이미 알고 있었다고 썼다.

5月に解任されたFBIのジェイムズ・コーミー長官は6月、上院情報委員会で、フリン前補佐官解任の翌日に大統領に呼ばれ、前補佐官への捜査をやめるよう要請されたと宣誓証言した。2月当時に自分が書いたメモも提出した。これに対してホワイトハウスは、捜査中止の要請はしていないと反論した。
5 월에 해임 된 FBI의 제임스 코미 장관은 6 월 상원 정보위원회에서 플린 전 보좌관 해임 다음날 대통령 불리며 전 보좌관에 대한 수사를 중단하라고 요청되었다고 선서 증언했다 . 2 월 당시 자신이 쓴 메모도 제출했다. 이에 대해 백악관은 수사 중단을 요청하지 않았다고 반박했다.

もしもトランプ大統領が、FBIへの虚偽供述を承知の上で、フリン前補佐官への捜査中止をFBI長官に要請したとするなら、それは大統領による司法妨害に相当すると、複数の専門家が指摘している。
만약 트럼프 대통령이 FBI에 허위 진술을 감안하고, 플린 전 보좌관에 대한 수사 중단을 FBI 장관에게 요청했다고한다면, 그것은 대통령의 사법 방해에 해당하면 여러 전문가들이 지적 있다.

たとえば、オバマ政権下の司法省にいたマシュー・ミラー氏はツイッターで、「これはすごい。(トランプ氏が)たった今、司法妨害を認めたぞ。もしコーミーに、これ以上捜査しないでほしいと言った時点で、フリンがFBIに嘘をついたと(大統領が)知っていたなら。これが事件になる」と書いた。
예를 들어, 오바마 행정부의 법무부에 있던 매튜 밀러는 트위터를 통해 "이것은 대단하다. (트럼프가) 방금 사법 방해를 인정 했어. 만약 코미에 더 이상 수사하지 말아달라고 말했다 현재 플린이 FBI에 거짓말과 (대통령이) 알고 있었다면 이것이 사건이된다 "고 썼다.

https://twitter.com/matthewamiller/status/937009631662104578

一方で、2日に報道陣を前にしたトランプ氏は、フリン被告の司法取引について質問され、「なんの結託もない。なんの結託もないということが、明らかになった。まったくなんの結託もない。なのでみんなとても喜んでいる」と答えた。
한편, 2 일 보도진을 앞둔 트럼프 플린 피고의 형량에 관한 질문 "무슨 결탁도 없다. 아무런 결탁이 없다는 것이 밝혀졌다. 전혀 아무런 결탁도 없다. 그래서 모두 매우 기뻐하고있다 "고 답했다.

これとは別に、米紙ニューヨーク・タイムズは、フリン被告がロシア当局と接触したのは独自判断の単独行動だったというホワイトハウスの主張とは食い違う、政権移行チームの内部メールを入手したと伝えた。
이와는 별도로, 미국 신문 뉴욕 타임즈는 플린 씨가 러시아 당국과 접촉 한 것은 자체 판단의 단독 행동 이었다는 백악관의 주장과는 어긋나는 정권 인수팀의 내부 메일을 입수했다고 전했다 .

同紙によると、たとえば移行チームのK・T・マクファーランド上級顧問がメールで、ロシアが「アメリカの選挙を(トランプ氏に)投げてよこした」と書いていた。
신문에 따르면, 예를 들어 마이그레이션 팀 K · T 맥팔랜드 선임 고문이 편지에서 러시아가 "미국의 선거를 (트럼프)에 던져 보내어"고 써 있었다.

ホワイトハウスの法律顧問は同紙に対して、上級顧問は単に民主党側がそのように見せかけようとしていると意味で書いただけだと説明した。
백악관 법률 고문은 신문에 수석 고문은 단순히 민주당 측이 그렇게 見せかけよ려고하고 있다고 의미에서 쓴 뿐이라고 설명했다.

司法取引 사법 거래

フリン被告はロバート・ムラー特別検察官との司法取引で、ロシアのセルゲイ・キスリャク大使と政権移行期間に接触し、オバマ政権の制裁やイスラエル入植地に関する国連安保理決議案などについて複数の要請をしていたことを認めた。さらに、大使との接触について今年1月の時点でFBIに虚偽供述をしたと認めた。
플린 씨는 로버트 물라 특별 검사와 사법 거래에서 러시아의 세르게이 키 슬리 야크 대사와 정권 과도기에 접촉 오바마 행정부의 제재와 이스라엘 정착촌에 대한 유엔 안보리 결의안 등에 대한 여러 요청을하고 것을 인정했다. 또한 대사와의 접촉에 대해 올해 1 월의 시점에서 FBI에 허위 진술을했다고 인정했다.

司法取引の内容を説明する起訴状には、フリン被告が政権移行チームの「上級首脳」からロシア大使との接触を指示されていたと書かれている。複数の米メディアは、この首脳とは、トランプ氏の娘婿で大統領顧問のジャレッド・クシュナー氏だろうと伝えている。
사법 거래의 내용을 설명하는 기소장에는 플린 씨가 정권 인수팀의 "고급 정상"러시아 대사와의 접촉을 지시했다고 적혀있다. 여러 미국 언론이 정상은 트럼프의 사위로 대통령 자문 제라드 쿠슈나 씨 것이라고 전하고있다.

米国では、民間人が政府の許可・関与なしに外国政府と外交交渉を行うのは違法。問題となっているロシア大使との接触は、トランプ政権発足前の昨年12月のこと。
미국에서는 민간인이 정부의 허가 · 관여없이 외국 정부와 외교 교섭을하는 것은 불법. 문제가되고있는 러시아 대사와의 접촉은 트럼프 정부 출범 전인 지난해 12 월.

FBIに対する虚偽供述の量刑は通常、最長5年の禁固刑だが、司法取引の結果、フリン被告への求刑は6カ月となっている。
FBI 대한 허위 진술의 양형은 일반적으로 최대 5 년의 징역형이지만, 사법 거래의 결과 플린 피고에 대한 구형은 6 개월이다.

米情報機関は今年1月に、ロシア政府がウラジーミル・プーチン大統領を筆頭に、トランプ氏を大統領選で勝たせようとしたと結論づける報告をまとめた。ロシア政府はこれを否定。トランプ氏は、自分の選挙対策チームとロシアとの結託はなかったと一貫して主張している。
미 정보 기관은 올해 1 월에 러시아 정부가 블라디미르 푸틴 대통령을 필두로, 트럼프를 대선에서 이겨 시키려했다고 결론보고를 정리했다. 러시아 정부는이를 ​​부정. 트럼프는 자신의 선거 대책 팀과 러시아와의 결탁은 없었다고 일관되게 주장하고있다.

大統領選にまつわるロシア疑惑を調べているムラー特別検察官の捜査陣は10月末、選挙戦中のトランプ陣営の外交顧問をFBIへの偽証罪で起訴したほか、トランプ選対元本部長を大統領選関連ではない資金洗浄罪で起訴した。ただし、短期間ながらトランプ政権幹部を務めた人物が有罪を認めるのは、フリン前補佐官が初めて。
대선에 얽힌 러시아 의혹을 조사하고있다 물라 특별 검사의 수사 팀은 10 월말 선거 전중 카드 진영의 외교 고문을 FBI에 위증죄로 기소했으며, 트럼프 선대 원금 부장을 대선 관련없는 자금 세척 혐의로 기소했다. 그러나 단기간 동안 트럼프 정권 간부를 지낸 인물이 유죄를 인정하는 것은 플린 전 보좌관이 처음이다.

(英語記事 Trump-Russia: Flynn's dealings were 'lawful')

「原発にミサイル発射」イエメン反政府組織 UAE否定

「原発にミサイル発射」イエメン反政府組織 UAE否定
"원전에 미사일 발사"예멘 반정부 조직 UAE 부정

12/3(日) 21:24配信 朝日新聞デジタル
 中東イエメンの反政府武装組織フーシは3日、アラブ首長国連邦(UAE)西部で建設中のバラカ原子力発電所に向け、ミサイルを発射したと発表した。AP通信などが報じた。一方、UAEの国営通信は「フーシが我が国にミサイルを発射したとの主張は偽りだ」とする同国危機管理当局の声明を伝えた。
12/3 (일) 21:24 전달 아사히 신문 디지털
중동 예멘 반정부 무장 조직 후티은 3 일 아랍 에미리트 연합 (UAE) 서부에 건설중인 바라카 원자력 발전소를 향해 미사일을 발사했다고 발표했다. AP 통신 등이 보도했다. 한편 UAE의 국영 통신은 "후티가 일본에 미사일을 발사했다고 주장은 거짓"이라고하는 나라 위기 관리 당국의 성명을 전했다.

 バラカ原子力発電所はアブダビ首長国のサウジアラビア国境近くにあり、韓国企業が建設を請け負った。原子炉4基を備え、一部は来年中にも営業運転を始める予定。
바라카 원자력 발전소는 아부 다비 에미리트 사우디 아라비아 국경 근처에 한국 기업이 건설을 하청 받았다. 원자로 4기를 갖춘 일부는 내년에도 영업 운전을 시작할 예정.

 フーシは2014年9月以降、イエメンの首都サヌアを含む同国北部を掌握。UAEはサウジアラビアなどとともに15年3月、イランの支援を受けるフーシを排除するとして、イエメンへの軍事介入を開始した。
후티는 2014 년 9 월 이후, 예멘의 수도 사나를 포함 동국 북부를 장악. UAE는 사우디 아라비아 등과 함께 15 년 3 월이란의 지원을받는 후티을 제거하기로 예멘에 군사 개입을 시작했다.

 だが、フーシは反撃を強めている。今年11月には、サウジの首都リヤドの国際空港に向けて弾道ミサイルを発射。サウジ軍は、ミサイルを迎撃したと発表した。フーシはさらに「次はドバイを標的にする」などとして、軍事介入する連合軍への威嚇を強めていた。(ドバイ=渡辺淳基)
 하지만 후티는 반격을 강화하고있다. 올해 11 월에는 사우디의 수도 리야드 국제 공항을 향해 탄도 미사일을 발사. 사우디 군은 미사일을 요격했다고 발표했다. 후티는 또한 "다음은 두바이를 표적으로하는"등으로 군사 개입 연합군에 위협을 강화했다. (두바이 = 와타나베 淳基)
 

NHK수신료

受信料を払わなければ、見れないようにすればいいだけの話。
有料チャンネルは普通にしていること。
それをしないのはNHKの怠慢。
수신료를 내야, 보지 못하게하면 좋은 것뿐의 이야기.
유료 채널은 보통으로하고 있음.
그것을하지 않는 것은 NHK의 태만.

義務じゃなくて強制。見なくていいと感じている人がいる時点で公共性ではない。水道も電気もいらなきゃ契約しなくてよい。バスもそう。テレビ、で一括ではなくて、その中のNHKだけなんやから、分離は可能。そんな多様性を認めないのは、何らかの政府のやましい意図があるに違いないと感じてしまう。
의무 아니라 강제. 보지 않아도 좋다고 느끼는 사람이있는 시점에서 공공성이 아니다. 수도도 전기도 필요 않으면 계약하지 않아도된다. 버스도 그렇고. TV,에서 일괄가 아니라 그 안에 NHK 뿐이 거니까 분리 가능. 그런 다양성을 인정하지 않는 것은 어떤 정부의 꺼림칙한 의도가있는 것이 틀림 없다고 느끼게된다.

確かに放送法の規定はそうなっていますね。自宅としているマンションの他に、仕事の都合でウィークリーマンションに住まわせられたらNHKの集金人がやって来て、無理やり契約させられ2世帯分の受信料払わされたから、その時よく勉強しましたよ。
それ以来、
「日本でテレビを持つことは、ナチスドイツの国民ラジオみたいなもの」
と考えるようにしてますが、スマホの時代にどう対応するのかは気になるところですね。
テレビがあればこれまでの判例を覆すことはないでしょうが、NHKの在り方についてどんな見解が示されるか興味深いところです。
朝日新聞デジタルだって、より詳細は有料だけど大方のニュースは無料で読めるのにね。ほぼ税金みたいな受信料に胡坐をかいているNHKは、この料金の点についてだけは、朝日新聞を見習った方が良いよ。

国民から料金を直接徴収しておきながら、ドキュメンタリーで少しは意地を見せてはいるものの、ニュースなどは現政権に忖度しまくりで、国民の方を見ていない、情けない内容ばかり。
払う価値なんかあるもんか。
국민으로부터 직접 대금을 징수 해 두면서, 다큐멘터리 조금은 고집을 보이고는 있지만, 뉴스 등은 현 정권에 손탁 마구로 국민의 분을 보지 못했다 한심한 내용뿐.
지불 가치 따위있는 것일까.

税金より酷いよ。税金は、なんだかんだでサービスを享受してるけど、NHKは、見ないから全額寄付になってる。
세금 더 심한거야. 세금은 이래저래 서비스를 누리고 있지만, NHK는보고 않기 때문에 전액 기부되어있다.

NHKにのみ特権を認めている現状は異様。スクランブルを掛けずに電波垂れ流しにするのは明らかに電波の押し売りであって受信しない権利を認めるべき。またNHKは職員給与が高いし技術開発にも資金を惜しげもなく投じるなど経費節減の努力をしているように思えないし肥大化しすぎている。「公共放送」の役目を果たすのなら地上波1つ、ラジオ1つぐらいで充分に足りるだろうから不必要な分は事業分離して本体は大幅に事業を縮小するべき。
NHK에만 특권을 인정하고있는 현상은 괴상. 스크램블을 걸지 않고 전파 방류하는 것은 분명히 전파 강매로서 수신하지 않을 권리를 인정해야. 또한 NHK는 직원 급여가 높고 기술 개발에 자금을 아낌없이 투입 등 경비 절감 노력을하고있는 듯없고 부풀어 너무있다. '공영 방송'의 역할을하는 것이라면 지상파 1 개, 라디오 하나 정도로 충분히 충분할테니까 불필요한 분은 사업 분리하고 본체는 크게 사업을 축소해야한다.

政府が白と言った物を、白以外は言えないと、政府側に忖度するのを当然と言う、公共の中立性と言う放送法の根幹に関わる所を、自ら反故にしてるのに、視聴者には放送法を守れという矛盾・・・

本当、スクランブル制にすれば良いのにねぇ。
ただ見が居なくなれば、受信料払ってるの事に対しても納得感はだいぶと増しになるだろうに。
정부가 흰색이라고 말했다 물건을 흰색 이외는 말할 수없는 정부 측에 손탁하는 것을 당연하다고 말한다 공공 중립성이란 방송법의 근간과 관련된 곳을 스스로 휴지 조각하고 있는데, 시청 사람은 방송법을 지키라는 모순 ...

진짜 스크램블 제로하면되는데 네요.
그냥보고가 없게되면 수신료 지불하고있는 것에 대해서도 납득 느낌은 많이하게 증가 될 텐데.

NHK受信料は義務か 最高裁判決、「いつ起点」も焦点

12/3(日) 7:45配信

家にテレビがあったらNHKの受信料を支払わなければならないか。NHKと契約を結ばず受信料を支払わない男性に、NHKが支払いを求めた訴訟で、最高裁大法廷が6日、判決を出す。男性は憲法が保障する「契約の自由」を理由に支払いを拒んでおり、受信料の支払いをめぐって憲法判断が示されるのは初めて。
집에 텔레비전이 있으면 NHK의 수신료를 지불해야 하는가? NHK와 계약을 체결하고 수신료를 지불하지 않는 남성에 NHK가 지불을 요구 한 소송에서 대법원 대법정이 6 일 판결을 내린다. 남자는 헌법이 보장하는 '계약의 자유'를 이유로 지급을 거절하고 있으며, 수신료 지불 둘러싸고 헌법 판단이 나타나는 것은 처음이다.

 最高裁が判決を出すのは、2006年3月に自宅にテレビを設置し、11年9月にNHKから契約を申し込まれた後も受信契約を結ばず、受信料を支払っていない男性のケース。男性は同年11月にNHKに提訴された。
대법원이 판결을내는 것은 2006 년 3 월에 집에 TV를 설치하고 11 년 9 월에 NHK에서 계약을 신청 한 후 수신 계약을 체결하고, 수신료를 지불하지 않은 남성의 경우 . 남성은 같은 해 11 월에 NHK에 제소되었다.

 放送法は「受信設備を設置したらNHKと契約しなければならない」と定めているが、受信料の支払い義務は明文化されていない。受信料は総務省の認可を得た規約で定められている。
방송법은 "수신 설비를 설치하면 NHK와 계약해야한다"고 규정하고 있지만, 수신료 지불 의무가 명문화되어 있지 않다. 수신료는 총무성의인가를 얻은 약관에 정해져있다.

 NHKは不祥事などで受信料の支払率が下落したことを受け、06年から支払いの督促などの法的手段を取り始めた。支払率は上昇したが、契約しながら未払いの世帯は16年度も2割を超える。ワンセグ放送なども含めると未契約の世帯や事業所は全国で約1千万に上るという。過去に受信料を巡って裁判になったケースは4千件以上ある。
NHK는 비리 등으로 수신료를 지불 율이 하락함에 따라 2006 년부터 지불 독촉 등의 법적 조처를 강구하기 시작했다. 지불금은 상승했지만, 계약하면서 무보수 가구는 16 년에도 20 %를 넘는다. DMB 방송 등도 포함하면 미계약 세대 나 사업소는 전국에서 약 1 천만에 달한다고한다. 과거에 수신료를 둘러싼 재판이 된 사례는 4000 건 이상이다.

 判決は15人の裁判官全員が参加する大法廷で審理されている。金田勝年法相(当時)は今年4月、放送法の規定は合憲とする意見書を最高裁に出した。判決が社会に大きな影響を与えると判断した場合にとれる措置で、戦後2例目だった。
판결은 15 명의 재판관 전원이 참여하는 대법정에서 심리되어있다. 카네다 勝年 법무 장관 (당시)은 올해 4 월 방송법 규정은 합헌으로하는 의견서를 대법원에 냈다. 판결이 사회에 큰 영향을 미칠 것으로 판단되는 경우 취할 조치에 전후 2 례목이었다.

 法曹関係者の間では、最高裁も一、二審判決同様、NHKの公共性などを理由に、支払いは義務で、放送法の規定は「合憲」と判断するとの見方が強い。
법조 관계자들 사이에서는 대법원도 한두 심 판결뿐만 아니라 NHK의 공공성 등을 이유로 지불 의무 방송법 규정은 '합헌'이라고 판단하는 견해가 강하다.

 一方、どの時期から支払うべきかについても、最高裁が判断を示すことになる。この訴訟では、NHK側は、NHKが申し込んだ時点で契約が自動的に成立すると主張。テレビ設置時にさかのぼって受信料を支払うべきだと主張している。男性は、支払うとしても、大法廷判決で敗れ、NHKと契約した以降の料金だけだと訴えている。
한편, 어느시기부터 지불해야하는지에 대해서도 대법원이 판단을 나타내게된다. 이 소송에서는 NHK 측은 NHK가 신청 한 시점에 계약이 자동으로 성립한다고 주장하고있다. 텔레비전 설치시에 소급하여 수신료를 지불해야한다고 주장하고있다. 남성은 지불해도 대법정 판결에서 패해 NHK와 계약 한 이후 요금 뿐이라고 호소하고있다.

 一、二審判決は、NHKとの受信契約を定めた放送法の規定は、契約を義務づけていると判断。NHKが契約していない人に裁判を起こして勝訴が確定した時点で契約が成立し、テレビ設置時にさかのぼって受信料を払わなくてはならないとしている。最高裁は、「豊かで良い放送」でなければ受信料制度の基盤が失われると指摘した一審判決と同様、公共放送のあり方に言及する可能性もある。(岡本玄)
한두 심 판결은 NHK와 수신 계약을 정한 방송법의 규정은 계약을 의무화하고 있다고 판단. NHK가 계약하지 않은 사람에게 재판을 일으켜 승소가 확정 된 시점에 계약이 성립, TV 설치시에 소급하여 수신료를 지불하지 않으면 안된다고하고있다. 대법원은 "풍부하고 좋은 방송 '아니면 수신료 제도의 기반이 없어진다고 지적했다 일심 판결뿐만 아니라 공영 방송의 본연의 자세에 대해 언급 할 가능성도있다. (오카모토 현)

2017년 12월 2일 토요일

조건문 한줄로 하기..

x = (v > 30) ? 100 : 0;

[오라클] 테이블 인덱스, 컬럼, 커멘트 정보 얻는 쿼리

-- 오브젝트 조회

SELECT *

FROM ALL_OBJECTS

WHERE OBJECT_NAME LIKE '명'



-- 테이블 조회

SELECT *

FROM ALL_TABLES

WHERE TABLE_NAME LIKE '명'



-- 시노님 조회

SELECT *

FROM ALL_SYNONYMS

WHERE SYNONYM_NAME = '명'



-- 테이블의 인덱스 정보

SELECT *

FROM ALL_IND_COLUMNS

WHERE TABLE_NAME = '테이블명'



-- 테이블의 컬럼 정보

SELECT *

FROM ALL_TAB_COLUMNS

WHERE TABLE_NAME = '테이블명'



-- TABEL COMMENT 쿼리

SELECT *

FROM ALL_TAB_COMMENTS

WHERE TABLE_NAME = '테이블명'



-- COLUMN COMMENT 쿼리

SELECT *

FROM ALL_COL_COMMENTS

WHERE TABLE_NAME = '테이블명'