ダークテーマ🌙で快適に記事を読もう!

あなたのシステム設定に合わせたテーマカラーで快適な閲覧体験を提供します。

0

いろんな言語比較してみた

最終更新日 投稿日 2023年11月28日

軽く比較🍻

書いた見た目を比較するだけ。
実装内容は

  • 文字列配列(系のやつ)の初期化、追加、末尾削除
  • のディープコピー
  • をフィルタするだけ
  • をフィルタしつつ出力

を関数にして呼び出すものとします。まぁ準備運動ですね。👯‍♂️

言語は以下です。
筆者が扱える言語が少ないのでこれだけですが、おいおい増やしたいと思います。

  • JavaScript
  • Python
  • Go
  • Java
  • Rust
  • C++
  • SQL
  • zsh
  • vimscript

JavaScript

これがいちばんすき😎😎

/**
 * test
 */
(() => {
    // 配列
    list = ["test", "test"]
    list.push("add")
    list.pop(0)
    // 配列を移す
    _ = [...list]
    // フィルタのみ
    _ = list.filter(v => v === "test")
    // フィルタして出力
    list.filter(v => v === "test").forEach(console.log)
})()

Python

短いねぇ!🤭

def test():
    """test
    """
    # 配列
    list = ["test", "test"]
    list.append("add")
    list.pop(-1)
    # 配列を移す
    _ = [v for v in list]
    # フィルタのみ
    _ = [v for v in list if v == "test"]
    # フィルタして出力
    for v in list:
        if v == "test":
            print(v)

test()

Go

好きだけど使いこなせてないです…🤔

package main

import "fmt"

/*
test
*/
func test() {
    // 配列
    list := [] string{"test","test"}
    list = append(list, "add")
    list = append(list[:len(list-1)])
    // 配列を移す
    copy := append(list[:0:0], list...)
    fnt.Println(copy) // unusedでエラーになるので…
    // フィルタのみ
    var fil []string
    for _, v := range list {
        if v == "test" {
            fil = append(fil, v)
        }
    }
    // フィルタして出力
    for _, v := range list {
        if v == "test" {
            fmt.Println(v)
        }
    }
}
func main() {
    test()
}

Java

仕事で一番多く使っています。飽きた😣

package test;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        /** test */
        Runnable test = () -> {
            // 配列
            List<String> list = new LinkedList<>(Arrays.asList("test", "test"));
            list.add("add");
            list.remove(list.size() - 1);
            // 配列を移す
            @SuppresWarnings("unused")
            Lisr<String> copy = new LinkedList<>(list);
            // フィルタのみ
            @SuppresWarnings("unused")
            List<String> fil = list.stream().filter("test"::equals).collect(Collectors.toList());
            // フィルタして出力
            list.stream().filter("test"::equals).forEach(System.out::println);
        };
        test.run();
    }
}

Rust

まだあまり使ったことがないのでもっと色々知りたい😏

/*
test
*/
fn test() {
    // 配列
    let mut list = vec!["test", "test"];
    list.push("add");
    list.pop();
    // 配列を移す
    let _ = list.to_vec();
    // フィルタのみ
    let _: Vec<String> = list.iter().filter(|&v| *v == "test").map(|&v| v.to_string()).collect();
    // フィルタして出力
    let _: Vec<String> = list.iter().filter(|&v| *v == "test").inspect(|&v| println!("{}", *v)).map(|&v| v.to_string()).collect();
}
fn main() {
    test();
}

C++

なんだかんだCが最強💪

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)

int main() {
    /** test */
    auto test = []() -> void{
        // 配列
        vector<string> list = {"test", "test"};
        list.push_back("add");
        list.pop_back();
        // 配列を移す
        vector<string> copy(list);
        // フィルタのみ
        vector<string> fil;
        rep(i, list.size()) if (list[i] == "test") fil.push_back(list[i]);
        // フィルタして出力
        rep(i, list.size()) if (list[i] == "test") cout << list[i] << endl;
    };
    test();
    return 0;
}

SQL

プロシージャはPL/pgSQLで書きました🐘
ちなみにSQLiteが軽くて好きです🪶

DROP TABLE IF EXISTS list;
DROP TABLE IF EXISTS cop;
CREATE TABLE list (test varchar(64));
CREATE TABLE cop (test varchar(64));

-- test
DROP FUNCTION IF EXISTS TEST();
CREATE OR REPLACE FUNCTION TEST() RETURNS VOID AS $$
    DECLARE
        GET_ARR VARCHAR := 'SELECT ''test'', ''test''';
        GET_RES VARCHAR;

        INSERT_QUERY VARCHAR := 'INSERT INTO list (test) VALUES (''test''), (''test''), (''add'')';
        DELETE_QUERY VARCHAR := 'DELETE FROM list WHERE test = ''test''';

        MOVE_QUERY VARCHAR := 'INSERT INTO cop (test) SELECT test FROM list';

        FILTER_QUERY VARCHAR := 'SELECT * FROM list WHERE test = ''test''';
        FIL_RES VARCHAR;

        FIL CURSOR IS SELECT * FROM list WHERE test = 'test';
        COLUMN_VAR VARCHAR;

    BEGIN
        -- 配列?
        EXECUTE GET_ARR INTO GET_RES;

        EXECUTE INSERT_QUERY;
        EXECUTE DELETE_QUERY;

        -- 配列?を移す
        EXECUTE MOVE_QUERY;

        -- フィルタのみ
        EXECUTE FILTER_QUERY INTO FIL_RES;

        -- フィルタして出力
        COLUMN_VAR := '';
        OPEN FIL;
        LOOP
            FETCH FIL INTO COLUMN_VAR;
            EXIT WHEN NOT FOUND;
            IF COLUMN_VAR = 'test' THEN
                RAISE NOTICE '%', COLUMN_VAR;
            END IF;
        END LOOP;
        CLOSE FIL;
    END;
$$ LANGUAGE 'plphsql';

SELECT TEST();

zsh

zshといいつつshellですね…🍎

# test
Test() {
    # 配列
    list=("test" "test")
    list+=("add")
    unset list[-1]
    # 配列を移す
    cop=()
    for v in ${list[@]}; do
        cop+=($v)
    done
    # フィルタのみ
    fil=()
    for v in ${list[@]}; do
        if [ $v == "test" ]; then
            fil+=($v)
        fi
    done
    # フィルタして出力
    for v in ${list[@]}; do
        if [ $v == "test" ]; then
            echo $v
        fi
    done
}
Test

vimscript

プラグイン作りまくってるのでめっちゃ書いてます。vimは神✨

" test
fu! Test() abort
    " 配列
    let list = ["test", "test"]
    cal add(list, "add")
    cal remove(list, len(list) - 1)
    " 配列を移す
    let cop = deepcopy(list)
    " フィルタのみ(破壊的)
    cal filter(list, { _, v -> v == "test" })
    " フィルタして出力
    for v in list
        if v == "test"
            echo v
        endif
    endfor
    " または、例えばlsコマンド結果文字列に対して
    for v in system('git ls-files -c')->split('\n')->filter({_,v->!empty(v)})->map({_,v->v.split('/')[-1]})
        echo v
    endfor
endf
cal Test()

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
0