Vamos criar algumas postagens nesse sentido para notarmos e aprendermos sobre diferentes formas que cada linguagem de programação usa para fazer a mesma coisa.
Para isso precisamos obter o diretório do usuário dinamicamente para que diversos usuários possam testar somente copiando e colando o código e rodando independente do local que estiver.
Em Lua vamos importar o lfs para tornar mais fácil essa verificação. Eis o código:
nvim dir-exists.lua
require("lfs")
require("os")
function exists(path)
if (lfs.attributes(path, "mode") == "directory") then
return true
end
return false
end
home = os.getenv("HOME") .. "/"
if exists(home .. "Downloads") then
print("Existe!")
else
print("Não existe.")
end
Em C++ vamos utilizar a biblioteca filesystem e compilar com C++17, apesar de que ele já é padrão em todos os sistemas que estão atualizados.
nvim dir-exists.cpp
#include <iostream>
#include <filesystem>
#include <cstdlib>
bool exists( std::string path){
return std::filesystem::exists( path );
}
int main(){
std::string home = getenv("HOME");
home = home + "/";
std::cout << (exists(home + "Downloads") ? "Existe!" : "Não existe.") << '\n';
return 0;
}
No C do mesmo jeito que usamos FILE * file para manipularmos arquivos, existe o DIR * dir
para diretórios, mas precisamos incluir a biblioteca dirent.h
.
Outra coisa é que o tipo bool
não é nativo do C, logo, precisamos também incluir stdbool.h
e também:
stdlib.h
- Que é a cstdlib
usada pelo C++ .string.h
- Para usarmos o strcat
sem warning para concatenarmos string sem precisar alocar memória com malloc
.Observação: Na função do tipo
bool
tive que fazerif .. else
porque precisamos fechar o diretório:closedir()
então só retornar não iria ser tão óbvio.
nvim dir-exists.c
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool exists( const char * home ){
DIR * path = opendir( home );
if( path ){
closedir( path );
return true;
}else{
return false;
}
}
int main(){
char * home = getenv("HOME");
const char * dir = "/Downloads";
strcat(home,dir);
exists( home ) ? printf("Existe!\n") : printf("Não existe.\n");
return 0;
}
Compile:
gcc dir-exists.c && ./a.out
Em Python talvez seja a forma mais fácil, só perde para o BASH .
nvim dir-exists.py
import os
def dir_exists(path):
return os.path.isdir(path)
home = os.path.expanduser('~') + "/"
if dir_exists( home + "Downloads" ):
print("Existe!")
else:
print("Não existe.")
python dir-exists.py
Simples, né?! E por falar em simplicidade, só por curiosidade em Shell Script é assim:
nvim dir-exists.sh
#!/bin/bash
[[ -d $HOME"/Downloads" ]] && \
echo "Existe!" || echo "Não existe."
Moleza, né?!
Se inscrevam no newsletter, vamos ter mais artigos nesse sentido de “comparativo” que ficam mais fácil de ir pegando “as manha”.
Falou!!!
langs linguagemc cpp lua python